Deli z drugimi prek


Integrirajte storitev captcha po meri z Customer Insights - Journeys obrazci

Customer Insights - Journeys obrazci vam omogočajo, da uporabite zaščito robotov captcha po meri za preverjanje oddaje obrazcev. Ta članek podaja primer, kako integrirati Google reCAPTCHA. Tok je podoben za druge storitve captcha.

opomba,

V trenutni različici aplikacije je lahko aktivna samo ena implementacija captcha. Če uporabljate lastnega ponudnika captcha (kot je opisano spodaj), bodo obstoječi obrazci, ki uporabljajo vnaprej pripravljeno captcha, prenehali delovati. Implementacija captcha po meri zahteva vsaj osnovno znanje pisanja in odpravljanja napak dataverse vtičnikov.

Postopek je sestavljen iz naslednjih korakov:

  1. V obrazec dodajte reCAPTCHA.
  2. Dodajte besedilno vrednost captcha oddaji obrazca, ko je obrazec oddan.
  3. Ustvarite vtičnik v CRM, ki preverja captcha.

Primer po korakih: integrirajte Google reCAPTCHA

1. V obrazec dodajte reCAPTCHA

  1. Ustvarite obrazec v Customer Insights - Journeys urejevalnik obrazcev.

  2. Dodajte atribut data-validate-submission="true" elementu <form> , ki omogoča preverjanje po meri pri predložitvi obrazca:

    Dodajte atribut elementu obrazca.

  3. Dodajte <div id="g-recaptcha"> v obrazec kot ogrado za reCAPTCHA. Ta div ID se kasneje uporabi kot referenca. Priporočljivo je, da ogrado postavite med zadnje polje in gumb za oddajo.

    Dodajte nadomestni znak za reCAPTCHA.

  4. Objavite obrazec in ga vdelajte v svojo spletno stran.

  5. Uredite stran, kjer je bil vdelan obrazec. Dodajte skript, ki ga je zagotovil Google, v glavo strani. Ta skript naloži reCAPTCHA s parametrom onLoad callback. Ta povratni klic se prikliče takoj, ko se naloži captcha.

    <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
    
  6. Dodajte funkcijo onLoadCallback:

    function onloadCallback() {
        grecaptcha.render('g-recaptcha',
        { 
          sitekey: '{sitekey}',
        });
    }
    

    Zamenjajte {sitekey} označbo mesta s tisto, ki jo ponuja Google. Ta funkcija povratnega klica upodobi reCAPTCHA znotraj nadomestnega znaka <div id="g-recaptcha"> , ki ste ga ustvarili prej.

  7. Registrirajte funkcijo onloadCallback, ki jo bo poklical nalagalnik obrazcev:

document.addEventListener("d365mkt-afterformload", onloadCallback);

2. Oddaji obrazca dodajte besedilno vrednost captcha

Ko je obrazec oddan, se parameter g-recaptcha-response samodejno doda oddaji obrazca. V naslednjih korakih boste zgradili vtičnik, ki skriva to vrednost, saj bo dodana na seznam ValidationOnlyFields v objektu odziva, ki ga vrne koda vtičnika.

Dodan je parameter G-recaptcha-response.

3. Ustvarite vtičnik

3.1 Ustvarite Visual Studio projekt za vtičnik

  1. Odprite Visual Studio in ustvarite nov projekt knjižnice razredov z uporabo .NET Framework 4.6.2.
  2. V Raziskovalcu rešitev izberite Upravljanje NuGet paketov in namestite Microsoft.CrmSdk.CoreAssemblies.

3.2 Ustvarite razred vtičnika

  1. Preimenuj Class1.cs v CustomValidationPlugin.cs.

  2. Naj razred CustomValidationPlugin podeduje vmesnik IPplugin in dodajte metodo Execute.

    public class CustomValidationPlugin : IPlugin
    {
       public void Execute(IServiceProvider serviceProvider)
       {
    
       }
    }
    
  3. Dodajte naslednjo kodo v metodo izvajanja, da pridobite kontekst in storitev sledenja.

    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));
    }
    
  4. Dodajte to kodo, da pridobite niz parametrov oddaje obrazca. To je niz, kodiran z JSON, ki predstavlja polja, ki jih je uporabnik vnesel v obrazec. Ta postopek pridobi ta niz in ga deserializira s pomožno metodo Deserialize in razredom FormSubmissionRequest, ki je definiran pozneje. S tem se preveri, ali polje Fields vsebuje ključ za odgovor g-recaptcha. Če ključa reCAPTCHA ni mogoče najti, vrne in preskoči preverjanje, saj obrazec, ki se obdeluje, ni vseboval elementa 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;
    }
    
  5. Dodajte naslednjo kodo za vrnitev, če je g-recaptcha-token vrednost ničelna ali prazna.

    if (String.IsNullOrEmpty(recaptchaToken))
    {
       tracingService.Trace($"g-recaptcha-response value not found");
       return;
    }
    
  6. Dodajte naslednjo kodo za preverjanje Googlovega žetona captcha glede na Googlove API-je.

    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}");
        }
    }
    

    Najprej se definira URL, nato se ustvari primerek HttpClient . Ustvari se FormUrlEncodedContent objekt, ki vsebuje recaptchaToken pridobljeno v prejšnjih korakih in skrivni ključ, ki ga zagotovi Google. Nato se pošlje POST zahteva in statusna koda se preveri, če ni uspešna, se vrne. Če je uspešen, deserializira odgovor s pomožno metodo Deserialize in GRecaptchaResponse ki je definirana pozneje. Nato ustvari nov ValidateFormSubmissionResponse objekt, ga serializira in nastavi kot vrednost izhodnega parametra msdynmkt_validationresponse, ki je edina Microsoftova storitev, ki jo uporablja za sprejem ali zavrnitev predložitve. Dodajanje g-recaptcha-response niza na ValidationOnlyFields seznam skrije to polje pred oddajo obrazca v uporabniškem vmesniku.

  7. Dodajte naslednjo kodo, da definirate pomožni metodi Serialize in Deserialize.

    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;
    }
    
  8. Dodajte naslednjo kodo, da definirate razrede, potrebne za serializacijo/deserializacijo objektov nizov 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 Podpišite in zgradite vtičnik

  1. Desni klik na projekt in izberite Lastnosti v Raziskovalcu rešitev.
  2. Izberite zavihek Podpis in potrdite potrditveno polje Podpiši sklop .
  3. Izberite <New...>.
  4. Vnesite ime datoteke s ključi in prekličite izbiro Zaščiti mojo datoteko s ključi z geslom.
  5. Zgradite projekt.
  6. Sklop vtičnika najdete CustomValidationPlugin.dll v \bin\Debug.

3.4 Registracija vtičnika

  1. Odprto PluginRegistration.exe.
  2. Izberite Ustvari novo povezavo.
  3. Izberite Office 365.
  4. Izberite možnost Prijava.
  5. Izberite Registracija in nato Registracija novega sklopa.

    Izberite Registriraj in nato Registriraj nov sklop.

  6. Izberite gumb (...) v 1. koraku in izberite dll, zgrajen v prejšnjih korakih.
  7. Izberite Registracija izbranega vtičnika.

3.4 Korak registracije

  1. Na seznamu registriranih sklopov izberite CustomValidationPlugin .
  2. Izberite Registracija novega koraka.
  3. Vnesite msdynmkt_validateformsubmission v besedilno polje sporočila.
  4. Prepričajte se, da je Način izvajanja nastavljen kot Sihrono.

    Prepričajte se, da je Execution Mode nastavljen na Synchonous.

  5. Prepričajte se, da je vrstni red za izvedbo nastavljen na 10.
  6. Prepričajte se, da je Event Pipeline Stage Of Execution nastavljen kot Post Operation.
  7. Izberite Registracija novega koraka.

Zaključek

Ko je oddan obrazec z atributom data-validate-submission , se vaš vtičnik po meri zažene in potrdi odgovor reCAPTCHA z Googlovimi storitvami. Vtičnik po meri se bo izvajal po privzetem Microsoftovem vtičniku za preverjanje veljavnosti. Če v obrazcu ni Microsoftovih polj captcha, se nastavi Microsoftov vtičnik IsValid:false in oddaja ne uspe, razen če ga prepišete z IsValid:true.

Potek validacije.