Integrera en anpassad captcha-tjänst med Customer Insights - Journeys-formulär
Customer Insights - Journeys-formulär i realtid kan du använda ditt anpassade robotskydd mot captcha för att verifiera formulärinskick. Den här artikeln innehåller ett exempel på hur du integrerar Google reCAPTCHA. Flödet är liknande för andra captcha-tjänster.
Kommentar
I den nuvarande versionen av appen kan endast en captcha-implementering vara aktiv. Om du använder din egen captcha-leverantör (som beskrivs nedan), kommer befintliga formulär som använder den färdiga captcha att sluta fungera. En anpassad captcha-implementering kräver åtminstone grundläggande kunskaper om att skriva och felsöka Dataverse plugin-program.
Processen består av följande steg:
- Lägg till reCAPTCHA i formuläret.
- Lägg till captcha-textvärdet i formulärinskick när formuläret har skickats.
- Skapa ett plugin-program i CRM för validering av captcha.
Steg-för-steg-exempel: Integrera Google reCAPTCHA
1. Lägg till reCAPTCHA i formuläret
Skapa ett formulär i formulärredigeraren för Customer Insights - Journeys.
Lägg till ett
data-validate-submission="true"
attribut i<form>
elementet, vilket gör det möjligt att anpassa valideringen när formuläret skickas:Lägg till en
<div id="g-recaptcha">
i formuläret som platshållare för reCAPTCHA. Detta div-ID används som referens senare. Det rekommenderas att placera platshållaren mellan det sista fältet och knappen Skicka.Publicera formuläret och infoga det på webbplatsen.
Redigera sidan där formuläret var inbäddat. Lägg till skriptet från Google i sidhuvudet. Det här skriptet läser in reCAPTCHA med motringningsparametern
onLoad
. Motringning anropas så fort captcha har lästs in.<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
Lägg till funktionen onLoadCallback:
function onloadCallback() { grecaptcha.render('g-recaptcha', { sitekey: '{sitekey}', }); }
Ersätt platshållaren
{sitekey}
med den som tillhandahålls av Google. Den här motringningsfunktionen återger reCAPTCHA i platshållare<div id="g-recaptcha">
som du skapade tidigare.Registrera onloadCallback-funktionen som ska anropas av formulärladdaren:
document.addEventListener("d365mkt-afterformload", onloadCallback);
2. Lägg till textvärdet för captcha i formulärets underkastelse
När formuläret har skickats läggs g-recaptcha-response
parametern till automatiskt i formulärets underkastelse. I nästa steg kommer du att skapa ett plugin-program som döljer detta värde, eftersom det kommer att läggas till i ValidationOnlyFields
lista i svarsobjektet som returneras av pluginkoden.
3. Skapa plugin-program
3.1 Skapa ett Visual Studio projekt för plugin-programmet
- Öppna Visual Studio och skapa ett nytt projekt för klassbibliotek med hjälp av .NET Framework 4.6.2.
- I lösningsutforskaren, välj Hantera NuGet-paket och installera
Microsoft.CrmSdk.CoreAssemblies
.
3.2 Skapa plugin-klassen
Byt namn på
Class1.cs
tillCustomValidationPlugin.cs
.Gör klassen CustomValidationPlugin ärva från IPlugin-gränssnittet och lägg till körningsmetoden.
public class CustomValidationPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { } }
Lägg till följande kod i körningsmetoden för hämtning av sammanhangs- och spårningstjänst.
public void Execute(IServiceProvider serviceProvider) { // get tracing service ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); // get plugin execution context IPluginExecutionContext context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext)); }
Lägg till den här koden för att hämta parametersträngen för formuläröverföring. Det är en JSON-kodad sträng som representerar fälten som användaren skickade i formuläret. Den här processen hämtar den här strängen och deserialiserar den med hjälp av hjälpmetoden för deserialisera och klassen FormSubmissionRequest som definieras senare. Detta kontrollerar att fältmatrisen innehåller en nyckel för g-recaptcha svar. Om du inte hittar reCAPTCHA-nyckeln returnerar den hoppa över valideringen eftersom formuläret som bearbetar inte innehåller något Google recaptcha-element.
var requestString = (string)context.InputParameters["msdynmkt_formsubmissionrequest"]; var requestObject = Deserialize<FormSubmissionRequest>(requestString); if (!requestObject.Fields.TryGetValue("g-recaptcha-response", out string recaptchaToken)) { tracingService.Trace("g-recaptcha-response was not present in form submission"); return; }
Lägg till följande kod att returnera om
g-recaptcha-token
värdet är null eller tomt.if (String.IsNullOrEmpty(recaptchaToken)) { tracingService.Trace($"g-recaptcha-response value not found"); return; }
Lägg till följande kod för att verifiera Google captcha-token mot Google API:er.
string url = "https://www.google.com/recaptcha/api/siteverify"; using (HttpClient client = new HttpClient()) { var content = new FormUrlEncodedContent(new Dictionary<string, string> { {"secret", "your_secret_key"}, {"response", recaptchaToken} }); try { var response = client.PostAsync(url, content).Result; if (!response.IsSuccessStatusCode) { tracingService.Trace($"Request Failed: ({response.StatusCode}){response.Content}"); return; } var responseString = response.Content.ReadAsStringAsync().Result; gRecaptchaResponse = Deserialize<GRecaptchaResponse>(responseString); var resp = new ValidateFormSubmissionResponse() { IsValid = isValid, ValidationOnlyFields = new List<string>() { "g-recaptcha-response" } }; context.OutputParameters["msdynmkt_validationresponse"] = Serialize(resp); } catch (Exception e) { tracingService.Trace($"{e.Message}"); } }
Först definieras URL:en och sedan skapas en instans av
HttpClient
. EttFormUrlEncodedContent
objekt skapas med det somrecaptchaToken
har hämtats i föregående steg och nyckeln som tillhandahålls av Google. Sedan skickas en förfråganPOST
och statuskoden kontrolleras om den inte lyckas. Om det lyckas deserialiserar det svaret med hjälp av metoden hjälpmetoden för deserialisera ochGRecaptchaResponse
som definieras senare. Sedan skapas ett nyttValidateFormSubmissionResponse
objekt, serialiserar det och ställer in det som värdet på utdataparameternmsdynmkt_validationresponse
, vilket är den Microsoft-tjänst den använder för att acceptera eller avvisa inlämningen. Lägga tillg-recaptcha-response
sträng till listanValidationOnlyFields
döljer detta fält från formuläröverföringen i användargränssnittet.Lägg till följande kod för att definiera hjälpmetoder för serialisering och deserialisering.
private T Deserialize<T>(string jsonString) { serializer = new DataContractJsonSerializer(typeof(T)); T result; using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) { result = (T)serializer.ReadObject(stream); } return result; } private string Serialize<T>(T obj) { string result; serializer = new DataContractJsonSerializer(typeof(T)); using (MemoryStream memoryStream = new MemoryStream()) { serializer.WriteObject(memoryStream, obj); result = Encoding.Default.GetString(memoryStream.ToArray()); } return result; }
Lägg till följande kod för att definiera de klasser som behövs för att serialisera/deserialisera JSON-strängobjekt.
public class FormSubmissionRequest { public Dictionary<string, string> Fields { get; set; } } public class GRecaptchaResponse { public bool success { get; set; } } public class ValidateFormSubmissionResponse { public bool IsValid { get; set; } public List<string> ValidationOnlyFields { get; set; } }
3.3 Logga in och skapa plugin-programmet
- Högerklicka på projektet och välj Egenskaper i Lösningsutforskaren.
- Markera fliken Signering och markera kryssrutan Skriv under sammansättning .
- Markera
<New...>
. - Ange ett filnamn för nyckeln och avmarkera Skydda nyckelfilen med ett lösenord.
- Skapa projektet.
- Plugin-programmet finns i sammansättningen
CustomValidationPlugin.dll
i\bin\Debug
.
3.4 Registrera plugin-program
- Öppna
PluginRegistration.exe
. - Välj Skapa ny anslutning.
- Välj Office 365.
- Välj Logga in.
- Välj Registrera och sedan Registrera ny sammansättning.
- Välj knappen (...) i steg 1 och välj dll-filen som du skapat i föregående steg.
- Välj Registrera valt plugin-program.
3.4: Registrera steg
- Välj CustomValidationPlugin i listan med registrerade sammansättningar.
- Välj Registrera nytt steg.
- Ange
msdynmkt_validateformsubmission
i textfältet Meddelande. - Kontrollera att körningsläget är synkront.
- Se till att Utförandeorder är inställd på
10
. - Se till att Pipelinestadium för händelse för körning anges som Post-åtgärd.
- Välj Registrera nytt steg.
Slutsats
När ett formulär med attributet data-validate-submission
skickas in körs och verifieras ditt anpassade plugin-program reCAPTCHA-svaret med Google-tjänster. Det anpassade plugin-programmet körs efter det standardinställda plugin-programmet för Microsoft-validering. Om det inte finns några Microsoft captcha-fält i formuläret anger Microsoft-plugin-programmet IsValid:false
och överföringen misslyckas om du inte skriver över det med IsValid:true
.