Integrere en brugerdefineret captcha-service med Customer Insights - Journeys-formularer
Customer Insights - Journeys-formularer giver dig mulighed for at bruge egen captcha-beskyttelse mod robotter til at validere formularafsendelser. Denne artikel indeholder et eksempel på, hvordan du integrerer Google reCAPTCHA. Flowet er lignende for andre captcha-tjenester.
Bemærk
I den aktuelle version af appen kan kun én captcha-implementering være aktiv. Hvis du bruger din egen captcha-udbyder (som beskrevet nedenfor), vil eksisterende formularer, der bruger den indbyggede captcha, holde op med at fungere. En brugerdefineret captcha-implementering kræver mindst grundlæggende viden om at skrive og fejlfinde Dataverse-plugins.
Processen består af disse trin:
- Føj reCAPTCHA til formularen.
- Føj captcha-tekstværdien til formularens afsendelse, når formularen er afsendt.
- Opret en plug-in i CRM, der validerer captcha.
Eksempel trin for trin: Integrer Google reCAPTCHA
1. Føj reCAPTCHA til formularen
Opret en formular i Customer Insights - Journeys-formulareditoren.
Føj en
data-validate-submission="true"
attribut til elementet<form>
, hvilket muliggør brugerdefineret validering af formularafsendelsen:Tilføj en
<div id="g-recaptcha">
i formularen som pladsholder for reCAPTCHA. Dette div-id bruges som reference senere. Det anbefales, at du placerer pladsholderen mellem det sidste felt og knappen Send.Publicer formularen, og integrer formularen på dit websted.
Rediger den side, hvor formularen blev integreret. Tilføj scriptet fra Google i sidehovedet. Dette script indlæser reCAPTCHA med tilbagekaldsparameteren
onLoad
. Dette tilbagekald kaldes, så snart captcha er indlæst.<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
Tilføj funktionen onLoadCallback:
function onloadCallback() { grecaptcha.render('g-recaptcha', { sitekey: '{sitekey}', }); }
Udskift
{sitekey}
pladsholderen med den, der leveres af Google. Denne tilbagekaldsfunktion gengiver reCAPTCHA i pladsholderen<div id="g-recaptcha">
, du har oprettet tidligere.Registrer onloadCallback-funktionen, der skal kaldes af formularindlæseren:
document.addEventListener("d365mkt-afterformload", onloadCallback);
2. Føj captcha-tekstværdien til formularens afsendelse
Når formularen er afsendt, føjes g-recaptcha-response
parameteren automatisk til formularens afsendelse. I de næste trin skal du oprette en plug-in, der skjuler denne værdi, da den vil blive føjet til listen ValidationOnlyFields
i det svarobjekt, der returneres af plug-in-koden.
3. Opret en plug-in
3.1 Opret et Visual Studio-projekt til plug-in'en
- Åbn Visual Studio, og opret et nyt klassebiblioteksprojekt ved hjælp af .NET Framework 4.6.2.
- I Løsningsoversigt skal du vælge Administrer NuGet-pakker og installere
Microsoft.CrmSdk.CoreAssemblies
.
3.2 Opret plug-in-klassen
Omdøb
Class1.cs
tilCustomValidationPlugin.cs
.Få CustomValidationPlugin-klassen til at arve fra brugergrænsefladen i IPlugin, og tilføj metoden Execute.
public class CustomValidationPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { } }
Tilføj følgende kode i kørselsmetoden for at hente kontekst- og sporingstjenesten.
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)); }
Tilføj denne kode for at hente parameterstrengen til formularindsendelse. Det er en JSON-kodet streng, der repræsenterer de felter, som brugeren har sendt i formularen. Denne proces henter denne streng og deserialiserer den ved hjælp af hjælpemetoden Deserialize og klassen FormSubmissionRequest, der defineres senere. Dette kontrollerer, at feltmatrixen indeholder en nøgle til g-recaptcha-response. Hvis reCAPTCHA-nøglen ikke blev fundet, returnerer den overspringning af validering, da den formular, der er behandlet, ikke indeholder et 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; }
Tilføj følgende kode til returnering, hvis
g-recaptcha-token
værdien er null eller tom.if (String.IsNullOrEmpty(recaptchaToken)) { tracingService.Trace($"g-recaptcha-response value not found"); return; }
Tilføj følgende kode for at validere Google-captcha-tokenet i forhold til 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 defineres URL-adressen, og derefter oprettes der en forekomst af
HttpClient
. Der oprettes etFormUrlEncodedContent
-objekt, som indeholder detrecaptchaToken
, der er hentet i tidligere trin, og den hemmelige nøgle, der leveres af Google. Derefter sendes enPOST
-anmodning, og statuskoden kontrolleres og returneres, hvis den ikke lykkes. Hvis den lykkes, deserialiseres svaret ved hjælp af Deserialize-hjælpemetoden ogGRecaptchaResponse
, der defineres senere. Derefter oprettes der et nytValidateFormSubmissionResponse
-objekt, det serialiseres, og det angives som værdien for outputparameterenmsdynmkt_validationresponse
, som er den tjeneste i Microsoft, som bruges til at acceptere eller afvise afsendelsen. Hvis du føjer strengeng-recaptcha-response
til listenValidationOnlyFields
, skjules dette felt fra formularens afsendelse i brugergrænsefladen.Tilføj følgende kode for at definere Serialize- og Deserialize-hjælpemetoder.
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; }
Tilføj følgende kode for at definere de klasser, der skal bruges til at serialisere/deserialisere JSON-strengobjekter.
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 Signer og opbyg plug-in'en
- Højreklik på projektet, og vælg Egenskaber i Løsningsoversigt.
- Vælg fanen Signering , og markér afkrydsningsfeltet Signer assembly.
- Vælg
<New...>
. - Angiv navnet på en nøglefil, og fravælg Beskyt min nøglefil med en adgangskode.
- Opbyg projektet.
- Du kan finde plug-in-assemblyen
CustomValidationPlugin.dll
i\bin\Debug
.
3.4 Registrer plug-in
- Åbn
PluginRegistration.exe
. - Vælg Opret ny forbindelse.
- Vælg Office 365.
- Vælg Logon.
- Vælg Registrer og derefter Registrer ny assembly.
- Vælg knappen (...) i trin 1, og vælg den dll, der blev oprettet i forrige trin.
- Vælg Register valgte plug-in.
3.4 Registrer trin
- Vælg CustomValidationPlugin på listen over registrerede assemblies.
- Vælg Registrer nyt trin.
- Angiv
msdynmkt_validateformsubmission
i tekstfeltet Meddelelse. - Kontrollér, at Udførelsestilstand er angivet som Synkron.
- Sørg for, at Udførelsesrækkefølge er indstillet til
10
. - Sørg for, at Hændelsespipelinefasen af udførelsen er angivet til Efterfølgende handling.
- Vælg Registrer nyt trin.
Konklusion
Når en formular med attributten data-validate-submission
sendes, kører og validerer din brugerdefinerede plug-in reCAPTCHA-svaret med Google-tjenester. Den brugerdefinerede plug-in kører efter Microsoft-standardvaliderings-plugin. Hvis der ikke er nogen Microsoft captcha-felter i formularen, indstilles Microsoft-plug-in IsValid:false
, og afsendelsen mislykkes, medmindre du overskriver den med IsValid:true
.