Azure Active Directory B2C özel ilkesini kullanarak kullanıcı girişlerini doğrulama

Azure Active Directory B2C (Azure AD B2C) özel ilkesi, kullanıcı girişlerini zorunlu hale getirmenin yanında bunları doğrulamanıza da olanak tanır. Kullanıcı girişlerini gibi gerekli olarak <DisplayClaim ClaimTypeReferenceId="givenName" Required="true"/>işaretleyebilirsiniz, ancak bu, kullanıcılarınızın geçerli veriler gireceği anlamına gelmez. Azure AD B2C, kullanıcı girişini doğrulamak için çeşitli yollar sağlar. Bu makalede, aşağıdaki yaklaşımları kullanarak kullanıcı girişlerini toplayan ve bunları doğrulayan özel bir ilke yazmayı öğreneceksiniz:

  • Seçecek seçeneklerin listesini sağlayarak kullanıcının girdiği verileri kısıtlayın. Bu yaklaşımda, bir talep bildirdiğinizde eklediğiniz Numaralandırılmış Değerler kullanılır.

  • Kullanıcı girişinin eşleşmesi gereken bir desen tanımlayın. Bu yaklaşımda, bir talep bildirdiğinizde eklediğiniz Normal İfadeler kullanılır.

  • Bir kural kümesi tanımlayın ve kullanıcı girişinin bir veya daha fazla kurala uymasını gerektirir. Bu yaklaşım, talep bildirdiğinizde eklediğiniz Koşul'ları kullanır.

  • Kullanıcının kullanıcı giriş koleksiyonu sırasında parolasını doğru şekilde yeniden girdiğini doğrulamak için reenterPassword özel talep türünü kullanın.

  • Talep bildirimi düzeyinde tanımlanması mümkün olmayan karmaşık iş kurallarını tanımlayan bir Doğrulama Teknik Profili yapılandırın. Örneğin, başka bir talepteki bir değere veya ayarlanmış değerlere göre doğrulanması gereken bir kullanıcı girişi toplarsınız.

Ön koşullar

Dekont

Bu makale, Azure Active Directory B2C'de kendi özel ilkelerinizi oluşturma ve çalıştırma nasıl yapılır kılavuzu serisinin bir parçasıdır. Bu seriyi ilk makaleden başlatmanızı öneririz.

1. Adım - Kullanıcı girişi seçeneklerini sınırlayarak kullanıcı girişini doğrulama

Kullanıcının belirli bir giriş için girebileceği tüm olası değerleri biliyorsanız, kullanıcının seçmesi gereken sınırlı bir değer kümesi sağlayabilirsiniz. Bu amaçla DropdownSinglSelect, CheckboxMultiSelect ve RadioSingleSelectUserInputType kullanabilirsiniz. Bu makalede RadioSingleSelect giriş türünü kullanacaksınız:

  1. VS Code'da dosyasını ContosoCustomPolicy.XMLaçın.

  2. dosyasının ClaimsSchema öğesinde ContosoCustomPolicy.XML aşağıdaki Talep Türünü bildirin:

        <ClaimType Id="accountType">
            <DisplayName>Account Type</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>The type of account used by the user</UserHelpText>
            <UserInputType>RadioSingleSelect</UserInputType>
            <Restriction>
                <Enumeration Text="Contoso Employee Account" Value="work" SelectByDefault="true"/>
                <Enumeration Text="Personal Account" Value="personal" SelectByDefault="false"/>
            </Restriction>
        </ClaimType>
    

    accountType talebi bildirdik. Talebin değeri kullanıcıdan toplandığında, kullanıcının değer çalışması için Contoso Çalışan Hesabı'nı veya kişisel bir değer için Kişisel Hesap'ı seçmesi gerekir.

    Azure AD B2C ayrıca ilkenizi farklı dillere uygun hale getirebilirsiniz ve birden çok dil için hesap türü kısıtlamaları sağlar. Daha fazla bilgi için Kullanıcı öznitelikleri ekleme makalesinin Kullanıcı arabirimini yerelleştirme makalesine bakın.

  3. ile Id="UserInformationCollector"teknik profili bulun, aşağıdaki kodu kullanarak accountType beyanını görüntüleme talebi olarak ekleyin:

        <DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/>
    
  4. ile Id="UserInformationCollector"teknik profilinde aşağıdaki kodu kullanarak accountType beyanını çıkış talebi olarak ekleyin:

        <OutputClaim ClaimTypeReferenceId="accountType"/>
    
  5. Hesap türü beyanını erişim belirtecine eklemek için öğesini bulunRelyingParty, aşağıdaki kodu kullanarak accountType beyanını belirteç talebi olarak ekleyin:

        <OutputClaim ClaimTypeReferenceId="accountType" />
    

2. Adım - Normal ifadeleri kullanarak kullanıcı girişini doğrulama

Tüm olası kullanıcı giriş değerlerini önceden bilmek mümkün olmadığında, kullanıcının verileri kendi başına girişine izin verirsiniz. Bu durumda, bir kullanıcı girişinin nasıl biçimlendirilmesi gerektiğini dikte etmek için normal ifadeler (regex) veya desen kullanabilirsiniz. Örneğin, bir e-postanın metninde (@) simgesi ve nokta (.) olmalıdır.

Bir talep bildirdiğinizde, özel ilke kullanıcı girişinin eşleşmesi gereken bir regex tanımlamanızı sağlar. İsteğe bağlı olarak, girişi ifadeyle eşleşmiyorsa kullanıcıya gösterilen bir ileti sağlayabilirsiniz.

  1. ClaimsSchema öğesini bulun ve aşağıdaki kodu kullanarak e-posta talebi bildirin:

        <ClaimType Id="email">
            <DisplayName>Email Address</DisplayName>
            <DataType>string</DataType>
            <DefaultPartnerClaimTypes>
                <Protocol Name="OpenIdConnect" PartnerClaimType="email"/>
            </DefaultPartnerClaimTypes>
            <UserHelpText>Your email address. </UserHelpText>
            <UserInputType>TextBox</UserInputType>
            <Restriction>
                <Pattern RegularExpression="^[a-zA-Z0-9.!#$%&amp;&apos;^_`{}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" HelpText="Please enter a valid email address something like maurice@contoso.com"/>
            </Restriction>
        </ClaimType>
    
  2. ile Id="UserInformationCollector"teknik profili bulun, aşağıdaki kodu kullanarak e-posta beyanını görüntüleme talebi olarak ekleyin:

        <DisplayClaim ClaimTypeReferenceId="email" Required="true"/>
    
  3. ile Id="UserInformationCollector"teknik profilinde, aşağıdaki kodu kullanarak e-posta beyanını çıkış talebi olarak ekleyin:

        <OutputClaim ClaimTypeReferenceId="email"/>
    
  4. RelyingParty öğesini bulun, aşağıdaki kodu kullanarak e-postayı belirteç talebi olarak ekleyin:

        <OutputClaim ClaimTypeReferenceId="email" />
    

3. Adım - Koşul kullanarak kullanıcı girişini doğrulama

Kullanıcı girişlerini doğrulamak için regex kullandınız. Ancak, regex'in bir zayıflığı vardır, yani girişin eksik olduğu belirli gereksinimi göstermeden girişi düzeltene kadar hata iletisi görüntülenir.

Koşul doğrulamaları, her kural için bir dizi kural (koşul) ve bağımsız hata iletisi tanımlamanıza olanak tanıyarak bu sorunu çözmenize olanak sağlar. Özel ilkelerde koşul, yapmak istediğiniz denetimleri tanımlayan yerleşik bir yönteme sahiptir. Örneğin, bir kullanıcı parolasının belirtilen en düşük ve en yüksek parametre (değerler) aralığında olup olmadığını denetlemek için IsLengthRange koşul yöntemini kullanabilirsiniz.

Koşul, bir talep türüne karşı denetlenecek doğrulamayı tanımlarken, PredicateValidations bir talep türüne uygulanabilecek bir kullanıcı girişi doğrulaması oluşturmak için bir dizi koşulu gruplandırmaktadır. Örneğin, parola için farklı türlerde izin verilen karakterleri doğrulayan bir koşul doğrulama grubu oluşturursunuz. Hem Predicates hem de PredicateValidations öğeleri, ilke dosyanızın bölümünün alt öğeleridirBuildingBlocks.

  1. ClaimsSchema öğesini bulun ve aşağıdaki kodu kullanarak parola talebi bildirin:

        <ClaimType Id="password">
          <DisplayName>Password</DisplayName>
          <DataType>string</DataType>
          <AdminHelpText>Enter password</AdminHelpText>
          <UserHelpText>Enter password</UserHelpText>
          <UserInputType>Password</UserInputType>
        </ClaimType>
    
  2. Aşağıdaki kodu kullanarak bir Predicates öğesini bölümün BuildingBlocks alt öğesi olarak ekleyin. öğesini öğesinin Predicates altına ClaimsSchema eklersiniz:

        <Predicates>
    
        </Predicates>
    
  3. öğesinin içinde Predicates , aşağıdaki kodu kullanarak önkoşulları tanımlayın:

      <Predicate Id="IsLengthBetween8And64" Method="IsLengthRange" HelpText="The password must be between 8 and 64 characters.">
        <Parameters>
          <Parameter Id="Minimum">8</Parameter>
          <Parameter Id="Maximum">64</Parameter>
        </Parameters>
      </Predicate>
    
      <Predicate Id="Lowercase" Method="IncludesCharacters" HelpText="a lowercase letter">
        <Parameters>
          <Parameter Id="CharacterSet">a-z</Parameter>
        </Parameters>
      </Predicate>
    
      <Predicate Id="Uppercase" Method="IncludesCharacters" HelpText="an uppercase letter">
        <Parameters>
          <Parameter Id="CharacterSet">A-Z</Parameter>
        </Parameters>
      </Predicate>
    
      <Predicate Id="Number" Method="IncludesCharacters" HelpText="a digit">
        <Parameters>
          <Parameter Id="CharacterSet">0-9</Parameter>
        </Parameters>
      </Predicate>
    
      <Predicate Id="Symbol" Method="IncludesCharacters" HelpText="a symbol">
        <Parameters>
          <Parameter Id="CharacterSet">@#$%^&amp;*\-_+=[]{}|\\:',.?/`~"();!</Parameter>
        </Parameters>
      </Predicate>
    
      <Predicate Id="PIN" Method="MatchesRegex" HelpText="The password must be numbers only.">
        <Parameters>
          <Parameter Id="RegularExpression">^[0-9]+$</Parameter>
        </Parameters>
      </Predicate>
    
      <Predicate Id="AllowedCharacters" Method="MatchesRegex" HelpText="An invalid character was provided.">
        <Parameters>
          <Parameter Id="RegularExpression">(^([0-9A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/`~"();! ]|(\.(?!@)))+$)|(^$)</Parameter>
        </Parameters>
      </Predicate>
    
      <Predicate Id="DisallowedWhitespace" Method="MatchesRegex" HelpText="The password must not begin or end with a whitespace character.">
        <Parameters>
          <Parameter Id="RegularExpression">(^\S.*\S$)|(^\S+$)|(^$)</Parameter>
        </Parameters>
      </Predicate>
    

    Bir araya getirildiğinde kabul edilebilir bir parolanın açıklandığı birkaç kural tanımladık. Ardından, ilkenizde kullanabileceğiniz bir dizi parola ilkesi oluşturmak için önkoşulları gruplandırabilirsiniz.

  4. Aşağıdaki kodu kullanarak bir PredicateValidations öğesini bölümün BuildingBlocks alt öğesi olarak ekleyin. öğesini bölümün PredicateValidationsBuildingBlocks alt öğesi olarak, ancak öğesinin Predicates altına eklersiniz:

        <PredicateValidations>
    
        </PredicateValidations>
    
  5. öğesinin PredicateValidations içinde aşağıdaki kodu kullanarak PredicateValidations tanımlayın:

        <PredicateValidation Id="SimplePassword">
            <PredicateGroups>
                <PredicateGroup Id="DisallowedWhitespaceGroup">
                    <PredicateReferences>
                        <PredicateReference Id="DisallowedWhitespace"/>
                    </PredicateReferences>
                </PredicateGroup>
                <PredicateGroup Id="AllowedCharactersGroup">
                    <PredicateReferences>
                        <PredicateReference Id="AllowedCharacters"/>
                    </PredicateReferences>
                </PredicateGroup>
                <PredicateGroup Id="LengthGroup">
                    <PredicateReferences>
                        <PredicateReference Id="IsLengthBetween8And64"/>
                    </PredicateReferences>
                </PredicateGroup>
            </PredicateGroups>
        </PredicateValidation>
        <PredicateValidation Id="StrongPassword">
            <PredicateGroups>
                <PredicateGroup Id="DisallowedWhitespaceGroup">
                    <PredicateReferences>
                        <PredicateReference Id="DisallowedWhitespace"/>
                    </PredicateReferences>
                </PredicateGroup>
                <PredicateGroup Id="AllowedCharactersGroup">
                    <PredicateReferences>
                        <PredicateReference Id="AllowedCharacters"/>
                    </PredicateReferences>
                </PredicateGroup>
                <PredicateGroup Id="LengthGroup">
                    <PredicateReferences>
                        <PredicateReference Id="IsLengthBetween8And64"/>
                    </PredicateReferences>
                </PredicateGroup>
                <PredicateGroup Id="CharacterClasses">
                    <UserHelpText>The password must have at least 3 of the following:</UserHelpText>
                    <PredicateReferences MatchAtLeast="3">
                        <PredicateReference Id="Lowercase"/>
                        <PredicateReference Id="Uppercase"/>
                        <PredicateReference Id="Number"/>
                        <PredicateReference Id="Symbol"/>
                    </PredicateReferences>
                </PredicateGroup>
            </PredicateGroups>
        </PredicateValidation>
        <PredicateValidation Id="CustomPassword">
            <PredicateGroups>
                <PredicateGroup Id="DisallowedWhitespaceGroup">
                    <PredicateReferences>
                        <PredicateReference Id="DisallowedWhitespace"/>
                    </PredicateReferences>
                </PredicateGroup>
                <PredicateGroup Id="AllowedCharactersGroup">
                    <PredicateReferences>
                        <PredicateReference Id="AllowedCharacters"/>
                    </PredicateReferences>
                </PredicateGroup>
            </PredicateGroups>
        </PredicateValidation>
    

    Üç tanımlı Koşul Doğrulama, StrongPassword, CustomPassword ve SimplePassword var. Kullanıcılarınızın girmelerini istediğiniz parolanın özelliklerine bağlı olarak, Koşul Doğrulamaları'nda herhangi bir parolayı kullanabilirsiniz. Bu makalede güçlü bir parola kullanacağız.

  6. Parola Talep Türü bildirimini bulun ve aşağıdaki kodu kullanarak içerdiği UserInputType öğe bildiriminden hemen sonra StrongPassword Koşul Doğrulamasını ekleyin:

        <PredicateValidationReference Id="StrongPassword" />
    
  7. ile Id="UserInformationCollector"teknik profili bulun, aşağıdaki kodu kullanarak parola beyanını görüntüleme talebi olarak ekleyin:

        <DisplayClaim ClaimTypeReferenceId="password" Required="true"/>
    
  8. ile Id="UserInformationCollector"teknik profilinde, aşağıdaki kodu kullanarak parola beyanını çıkış talebi olarak ekleyin:

        <OutputClaim ClaimTypeReferenceId="password"/>
    

Dekont

Güvenlik nedeniyle, ilkeniz tarafından oluşturulan belirteçte bir kullanıcının parolasını talep olarak eklemeyeceğiz. Bu nedenle, bağlı olan taraf öğesine parola talebi eklemiyoruz.

4. Adım - Parolayı doğrulama ve parolayı onaylama

Kullanıcılarınızın parolalarını iki kez girerek kullanıcının giriş yaptığı parolayı anımsadığını onaylamasını sağlayabilirsiniz. Bu durumda, iki girdinin değerlerinin eşleşerek eşleşmediğini denetlemeniz gerekir. Özel ilke, bu gereksinimi yerine getirmek için kolay bir yol sağlar. Talep türleri parola ve reenterPassword özel olarak kabul edilir, bu nedenle kullanıcı girişlerini toplamak için kullanıldığında kullanıcı arabirimi kullanıcının parolasını doğru şekilde yeniden girdiğinizi doğrular.

Özel ilkenizde parolanın yeniden girildiğinden doğrulamak için aşağıdaki adımları kullanın:

  1. Dosyanızın ClaimsSchemaContosoCustomPolicy.XML bölümünde, aşağıdaki kodu kullanarak parola talebinden hemen sonra reenterPassword talebi bildirin:

        <ClaimType Id="reenterPassword">
            <DisplayName>Confirm new password</DisplayName>
            <DataType>string</DataType>
            <AdminHelpText>Confirm new password</AdminHelpText>
            <UserHelpText>Reenter password</UserHelpText>
            <UserInputType>Password</UserInputType>
        </ClaimType>    
    
  2. Kullanıcıdan parola onayı girişi toplamak için, kendi kendine onaylanan teknik profili bulunUserInformationCollector, aşağıdaki kodu kullanarak reenterPassword talebi'ni görüntüleme talebi olarak ekleyin:

        <DisplayClaim ClaimTypeReferenceId="reenterPassword" Required="true"/>
    
  3. DosyanızdaContosoCustomPolicy.XML, aşağıdaki kodu kullanarak kendi kendine onaylanan teknik profili bulunUserInformationCollector, reenterPassword talebi'ni çıkış talebi olarak ekleyin:

        <OutputClaim ClaimTypeReferenceId="reenterPassword"/>
    

5. Adım - Özel ilke dosyasını karşıya yükleme

Bu noktada, kullanıcı girişi doğrulamaya yönelik ilk üç yaklaşımı ele almak için ilkenizi oluşturdunuz.

Özel ilke dosyasını karşıya yükleme bölümünde yer alan adımları izleyin. Portalda bulunan dosyayla aynı ada sahip bir dosyayı karşıya yüklüyorsanız, zaten varsa Özel ilkenin üzerine yaz'ı seçtiğinizden emin olun.

6. Adım - Özel ilkeyi test edin

  1. Özel ilkeler'in altında B2C_1A_CONTOSOCUSTOMPOLICY'ı seçin.

  2. Özel ilkenin genel bakış sayfasında Uygulamayı seçin için daha önce kaydettiğiniz webapp1 gibi web uygulamasını seçin. Yanıt URL'si seç değerinin olarak ayarlandığındanhttps://jwt.ms emin olun.

  3. Şimdi çalıştır düğmesini seçin.

  4. Verilen Ad ve Soyadı girin.

  5. Hesap Türü'nü seçin.

  6. E-posta Adresi için, maurice@contoso gibi iyi biçimlendirilmemiş bir e-posta değeri girin.

  7. Parola alanına, ayarlandığı gibi güçlü bir parolanın tüm özelliklerine uymayan parola değerini girin.

  8. Devam düğmesini seçin. Aşağıda gösterilene benzer bir ekran görürsünüz:

    screenshot of validating user inputs.

    Devam etmeden önce girişlerinizi düzeltmeniz gerekir.

  9. Hata iletileri tarafından önerilen doğru değerleri girin ve yeniden Devam düğmesini seçin. İlke yürütmeyi tamamladıktan sonra adresine yönlendirilirsiniz https://jwt.msve kodu çözülen bir JWT belirteci görürsünüz. Belirteç aşağıdaki JWT belirteci kod parçacığına benzer:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "c7ae4515-f7a7....",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      "accountType": "work",
      ...
      "email": "maurice@contoso.com",
      "name": "Maurice Paulet",
      "message": "Hello Maurice Paulet"
    }.[Signature]

7. Adım - Doğrulama teknik profillerini kullanarak kullanıcı girişini doğrulama

1. adım, 2. ve 3. adımda kullandığımız doğrulama teknikleri tüm senaryolar için geçerli değildir. İş kurallarınızın talep bildirimi düzeyinde tanımlanması karmaşıksa, Doğrulama Teknik'i yapılandırabilir ve bunu Kendi Kendine Onaylanan Teknik Profilden çağırabilirsiniz.

Dekont

Doğrulama teknik profillerini yalnızca kendi kendine onaylanan teknik profiller kullanabilir. Doğrulama teknik profili hakkında daha fazla bilgi edinin

Senaryoya genel bakış

Kullanıcının Hesap Türü Contoso Çalışan Hesabı ise, e-posta etki alanının önceden tanımlanmış bir etki alanı kümesine dayalı olduğundan emin olmamız gerekir. Bu etki alanları contoso.com, fabrikam.com ve woodgrove.com. Aksi takdirde, geçerli bir Contoso Çalışan Hesabı kullanana veya Kişisel Hesap'a geçene kadar kullanıcıya bir hata gösteririz.

Doğrulama teknik profillerini kullanarak kullanıcı girişini doğrulamayı öğrenmek için aşağıdaki adımları kullanın. Talep dönüştürme türü doğrulama teknik profili kullanırsınız, ancak bu serinin ilerleyen bölümlerinde öğreneceğiniz gibi verileri doğrulamak için rest API hizmetini de çağırabilirsiniz.

  1. Dosyanızın ClaimsSchemaContosoCustomPolicy.XML bölümünde, aşağıdaki kodu kullanarak etki alanı ve etki alanıStatus taleplerini bildirin:

        <ClaimType Id="domain">
          <DataType>string</DataType>
        </ClaimType>
    
        <ClaimType Id="domainStatus">
          <DataType>string</DataType>
        </ClaimType>
    
  2. ClaimsTransformations bölümünü bulun ve aşağıdaki kodu kullanarak talep dönüştürmelerini yapılandırın:

        <ClaimsTransformation Id="GetDomainFromEmail" TransformationMethod="ParseDomain">
            <InputClaims>
                <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="emailAddress"/>
            </InputClaims>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="domain" TransformationClaimType="domain"/>
            </OutputClaims>
        </ClaimsTransformation>
        <ClaimsTransformation Id="LookupDomain" TransformationMethod="LookupValue">
            <InputClaims>
                <InputClaim ClaimTypeReferenceId="domain" TransformationClaimType="inputParameterId"/>
            </InputClaims>
            <InputParameters>
                <InputParameter Id="contoso.com" DataType="string" Value="valid"/>
                <InputParameter Id="fabrikam.com" DataType="string" Value="valid"/>
                <InputParameter Id="woodgrove.com" DataType="string" Value="valid"/>
                <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="true"/>
            </InputParameters>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="domainStatus" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation>
    

    GetDomainFromEmail talep dönüştürmesi, ParseDomain yöntemini kullanarak bir etki alanını e-postadan ayıklar ve etki alanı talebine depolar. LookupDomain Talepleri Dönüşümü, ayıklanan etki alanını kullanarak önceden tanımlanmış etki alanlarında arama yaparak ve domainStatus talebine geçerli atayarak geçerli olup olmadığını denetler.

  3. ile teknik profille aynı talep sağlayıcısına bir teknik profil Id=UserInformationCollectoreklemek için aşağıdaki kodu kullanın:

        <TechnicalProfile Id="CheckCompanyDomain">
            <DisplayName>Check Company validity </DisplayName>
            <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <InputClaimsTransformations>
                <InputClaimsTransformation ReferenceId="GetDomainFromEmail"/>
            </InputClaimsTransformations>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="domain"/>
            </OutputClaims>
            <OutputClaimsTransformations>
                <OutputClaimsTransformation ReferenceId="LookupDomain"/>
            </OutputClaimsTransformations>
        </TechnicalProfile>
    

    GetDomainFromEmail ve LookupDomain talep dönüştürmelerini yürüten talep dönüştürme teknik profili bildirdik.

  4. Aşağıdaki kodu kullanarak öğesinden hemen sonra OutputClaims ve ValidationTechnicalProfile ile Id=UserInformationCollectorteknik profili bulun:

        <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="CheckCompanyDomain">
                <Preconditions>
                    <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
                        <Value>accountType</Value>
                        <Value>work</Value>
                        <Action>SkipThisValidationTechnicalProfile</Action>
                    </Precondition>
                </Preconditions>
            </ValidationTechnicalProfile>
        </ValidationTechnicalProfiles>
    

    UserInformationCollector kendi kendine onaylanan teknik profile bir Doğrulama Teknik Profili ekledik. Teknik profil yalnızca accountType değeri işe eşit değilse atlanır. Teknik profil yürütülürse ve e-posta etki alanı geçerli değilse, hata oluştu.

  5. ile Id=UserInformationCollectorteknik profili bulun ve etiketine metadata aşağıdaki kodu ekleyin.

        <Item Key="LookupNotFound">The provided email address isn't a valid Contoso Employee email.</Item>
    

    Kullanıcının geçerli bir e-posta kullanmaması durumunda özel bir hata ayarladık.

  6. İlke dosyanızı karşıya yüklemek için Özel ilke dosyasını karşıya yükleme başlığındaki yönergeleri izleyin.

  7. Özel ilkenizi test etmek için 6. adımdaki yönergeleri izleyin:

    1. Hesap Türü için Contoso Çalışan Hesabı'yı seçin
    2. E-posta Adresi için gibi maurice@fourthcoffee.comgeçersiz bir e-posta adresi girin.
    3. Diğer ayrıntıları gerektiği gibi girin ve Devam'ı seçin

    maurice@fourthcoffee.com Geçerli bir e-posta olmadığından, aşağıdaki ekran görüntüsünde gösterilene benzer bir hata görürsünüz. Özel ilkeyi başarıyla çalıştırmak ve bir JWT belirteci almak için geçerli bir e-posta adresi kullanmanız gerekir.

    screenshot of error due to invalid email address.

Sonraki adımlar