Integrace vlastní služby CAPTCHA s formuláři Customer Insights - Journeys
Formuláře Customer Insights - Journeys umožňují používat vlastní ochranu captcha před roboty k ověřování odesílání formulářů. Tento článek uvádí příklad, jak integrovat Google reCAPTCHA. Tento tok je podobný i pro ostatní služby captcha.
Poznámka:
V současné verzi aplikace může být aktivní pouze jedna implementace captcha. Pokud používáte vlastního poskytovatele captcha (jak je popsáno níže), stávající formuláře, které používají předpřipravné captcha, přestanou fungovat. Vlastní implementace captcha vyžaduje alespoň základní znalosti psaní a ladění modulů plug-in dataverse.
Proces se skládá z těchto kroků:
- Přidání reCAPTCHA do formuláře.
- Do odeslání formuláře přidejte textovou hodnotu captcha, která se aktivuje odesláním formuláře.
- Vytvořte modul plug-in v CRM, který ověřuje captcha.
Podrobný příklad: Integrace Google reCAPTCHA
1. Přidání reCAPTCHA do formuláře
Vytvořte formulář v editoru formulářů Customer Insights - Journeys.
Přidejte atribut
data-validate-submission="true"
do prvku<form>
, který umožní vlastní ověření při odeslání formuláře:Přidejte
<div id="g-recaptcha">
do formuláře jako zástupný symbol pro reCAPTCHA. Toto ID div se později použije jako reference. Doporučuje se umístit zástupný symbol mezi poslední pole a tlačítko Odeslat.Publikujte formulář a vložte jej na svůj web.
Upravte stránku, kam byl formulář vložen. Přidejte skript poskytnutý společností Google do záhlaví stránky. Tento skript načte reCAPTCHA s parametrem zpětného volání
onLoad
. Toto zpětné volání je voláno, jakmile je načteno captcha.<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
Přidejte funkci onLoadCallback:
function onloadCallback() { grecaptcha.render('g-recaptcha', { sitekey: '{sitekey}', }); }
Nahraďte zástupný symbol
{sitekey}
zástupným symbolem poskytnutým společností Google. Tato funkce zpětného volání vykreslí reCAPTCHA uvnitř zástupného symbolu<div id="g-recaptcha">
, který jste vytvořili dříve.Zaregistrujte funkci onloadCallback, kterou zavolá zavaděč formuláře:
document.addEventListener("d365mkt-afterformload", onloadCallback);
2. Přidání textové hodnoty captcha do odeslání formuláře
Jakmile je formulář odeslán, parametr g-recaptcha-response
se automaticky přidá do odeslání formuláře. V dalších krocích vytvoříte modul plug-in, který tuto hodnotu skryje, protože bude přidána do seznamu ValidationOnlyFields
v objektu odpovědi vráceném kódem modulu plug-in.
3. Vytvoření modulu plug-in
3.1 Vytvoření projektu Visual Studio pro modul plug-in
- Otevřete Visual Studio a vytvořte nový projekt knihovny tříd pomocí rozhraní .NET Framework 4.6.2.
- V Průzkumníku řešení vyberte Spravovat balíčky NuGet a nainstalujte
Microsoft.CrmSdk.CoreAssemblies
.
3.2 Vytvoření třídu modulů plug-in
Přejmenujte
Class1.cs
naCustomValidationPlugin.cs
.Zajistěte, aby třída CustomValidationPlugin dědila z rozhraní IPlugin a přidejte metodu Execute.
public class CustomValidationPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { } }
Do metody spuštění přidejte následující kód, abyste načetli kontext a službu trasování.
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)); }
Přidejte tento kód, abyste načetli řetězec parametru odeslání formuláře. Je to řetězec kódovaný JSON představující pole, která uživatel odeslal ve formuláři. Tento proces načte tento řetězec a deserializuje jej pomocí pomocné metody Deserialize a třídy FormSubmissionRequest, která je definována později. Tím se zkontroluje, že pole Pole obsahuje klíč pro g-recaptcha-response. Pokud klíč reCAPTCHA není nalezen, vrátí se přeskočení ověření, protože zpracovávaný formulář neobsahoval prvek Google reCAPTCHA.
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; }
Přidejte následující kód, aby bylo vráceno, zda je hodnota
g-recaptcha-token
null nebo prázdná.if (String.IsNullOrEmpty(recaptchaToken)) { tracingService.Trace($"g-recaptcha-response value not found"); return; }
Přidejte následující kód, abyste ověřili token Google captcha prostřednictvím rozhraní Google API.
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}"); } }
Nejprve je definována adresa URL a poté je vytvořena instance
HttpClient
. Vytvoří se objektFormUrlEncodedContent
obsahujícírecaptchaToken
získaný v předchozích krocích a tajný kód poskytnutý společností Google. Poté se odešle požadavekPOST
a zkontroluje se stavový kód, pokud není úspěšný, vrátí se. Pokud je úspěšný, deserializuje odpověď s použitím pomocné metody Deserializovat a paramteruGRecaptchaResponse
, který je definován později. Poté vytvoří nový objektValidateFormSubmissionResponse
, serializuje jej a nastaví jako hodnotu výstupního parametrumsdynmkt_validationresponse
, což je jedna služba společnosti Microsoft, kterou používá k přijetí nebo odmítnutí odeslání. Přidáním řetězceg-recaptcha-response
do seznamuValidationOnlyFields
skryjete toto pole před odesláním formuláře v uživatelském rozhraní.Přidejte následující kód k definování pomocných metod Serializace a Deserializace.
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; }
Přidejte následující kód k definování tříd potřebných k serializaci/deserializaci objektů řetězců JSON.
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 Podepsání a vytvořebí modulu plug-in
- Klikněte pravým tlačítkem na projekt a vyberte Vlastnosti v Průzkumníku řešení.
- Vyberte kartu Podpis a zaškrtněte políčko Podepsat sestavení.
- Vyberte možnost
<New...>
. - Zadejte název souboru klíče a zrušte výběr Chránit heslem můj soubor klíče.
- Sestavte projekt.
- Sestavení modulu plug-in
CustomValidationPlugin.dll
najdete v umístění\bin\Debug
.
3.4 Registrace modulu plug-in
- Otevře záznam typu
PluginRegistration.exe
. - Vyberte Vytvořit nové připojení.
- Zvolte Office 365.
- Vyberte volbu Přihlásit se.
- Vyberte Registrovat a poté Registrovat nové sestavení.
- V kroku 1 vyberte tlačítko (...) a vyberte knihovnu dll vytvořenou v předchozích krocích.
- Vyberte Registrovat vybrané moduly plug-in.
3.4 Krok registrace
- Ze seznamu registrovaných sestavení vyberte CustomValidationPlugin.
- Vyberte Registrovat nový krok.
- Do textového pole zprávy zadejte
msdynmkt_validateformsubmission
. - Ujistěte se, že Režim provádění je nastaven jako Synchronní.
- Ujistěte se, že je Prováděcí příkaz nastaven na
10
. - Ujistěte se, že Fáze profilace události provádění je nastavena jako Po operaci.
- Vyberte Registrovat nový krok.
Závěr
Po odeslání formuláře s atributem data-validate-submission
se spustí váš vlastní modul plug-in a ověří odpověď reCAPTCHA pomocí služeb Google. Vlastní modul plug-in se spustí po výchozím ověřovacím modulu plug-in společnosti Microsoft. Pokud ve formuláři nejsou žádná pole captcha společnosti Microsoft, modul plug-in společnosti Microsoft nastaví IsValid:false
a odeslání se nezdaří, pokud jej nepřepíšete pomocí IsValid:true
.