Sdílet prostřednictvím


Shromažďování uživatelských vstupů a manipulace s nimi pomocí vlastních zásad Azure Active Directory B2C

Vlastní zásady Azure Active Directory B2C (Azure AD B2C) umožňují shromažďovat vstupy uživatelů. Pak můžete použít inbuilt metody pro manipulaci se vstupy uživatele.

V tomto článku se dozvíte, jak napsat vlastní zásady, které shromažďují vstupy uživatelů prostřednictvím grafického uživatelského rozhraní. Pak budete přistupovat ke vstupům, zpracovat je a nakonec je vrátit jako deklarace identity v tokenu JWT. K dokončení tohoto úkolu:

  • Deklarujte deklarace identity. Deklarace identity poskytuje dočasné úložiště dat během provádění zásad Azure AD B2C. Může ukládat informace o uživateli, jako je jméno, příjmení nebo jakákoli jiná deklarace identity získaná uživatelem nebo jinými systémy. Další informace o deklarací identity najdete v přehledu vlastních zásad Azure AD B2C.

  • Definujte technické profily. Technický profil poskytuje rozhraní pro komunikaci s různými typy stran. Umožňuje například interakci s uživatelem a shromažďovat data.

  • Nakonfigurujte transformace deklarací identity, které používáte k manipulaci s deklaracemi identity.

  • Nakonfigurujte definice obsahu. Definice obsahu definuje uživatelské rozhraní, které se má načíst. Později můžete uživatelské rozhraní přizpůsobit tak, že poskytnete vlastní přizpůsobený obsah HTML.

  • Nakonfigurujte a zobrazte uživatelská rozhraní pro uživatele pomocí technických profilů a displayClaims.

  • Volání technických profilů v dané sekvenci pomocí kroků orchestrace

Předpoklady

Poznámka:

Tento článek je součástí řady s návody k vytvoření a spuštění vlastních zásad v Azure Active Directory B2C. Doporučujeme spustit tuto řadu z prvního článku.

Krok 1 – Deklarace deklarací identity

Deklarujte další deklarace identity společně s objectId a zprávou:

  1. V editoru ContosoCustomPolicy.XML VS Code otevřete soubor.

  2. ClaimsSchema V části přidejte následující deklarace ClaimType:

        <ClaimType Id="givenName">
            <DisplayName>Given Name</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Your given name (also known as first name).</UserHelpText>
            <UserInputType>TextBox</UserInputType>
        </ClaimType>
    
        <ClaimType Id="surname">
            <DisplayName>Surname</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Your surname (also known as family name or last name).</UserHelpText>
            <UserInputType>TextBox</UserInputType>
        </ClaimType>
        <ClaimType Id="displayName">
            <DisplayName>Display Name</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Your display name.</UserHelpText>
            <UserInputType>TextBox</UserInputType>
        </ClaimType>
    

Deklarovali jsme tři typy deklarací identity, givenName, příjmení a displayName. Mezi tyto deklarace patří DataTypeUserInputType a DisplayName prvky:

  • Datový typ určuje datový typ hodnoty, kterou deklarace identity uchovávají. Přečtěte si další informace o datových typech, které prvky DataType podporují.
  • UserInputType určuje ovládací prvek uživatelského rozhraní, který se zobrazí v uživatelském rozhraní, pokud chcete shromáždit hodnotu deklarace identity od uživatele. Přečtěte si další informace o typech uživatelských vstupů, které Azure AD B2C podporuje.
  • DisplayName určuje popisek ovládacího prvku uživatelského rozhraní, který se zobrazí v uživatelském rozhraní, pokud chcete shromáždit hodnotu deklarace identity od uživatele.

Krok 2 : Definování transformací deklarací identity

Deklarace IdentityTransformation obsahuje funkci, kterou použijete k převodu dané deklarace na jinou. Můžete například změnit deklaraci řetězce z malých písmen na velká písmena. Přečtěte si další informace o transformacích deklarací identity podporovaných službou Azure AD B2C.

  1. ContosoCustomPolicy.XML V souboru přidejte <ClaimsTransformations> prvek jako podřízenou částBuildingBlocks.

        <ClaimsTransformations>
    
        </ClaimsTransformations>
    
  2. Do elementu ClaimsTransformations přidejte následující kód:

        <ClaimsTransformation Id="GenerateRandomObjectIdTransformation" TransformationMethod="CreateRandomString">
            <InputParameters>
            <InputParameter Id="randomGeneratorType" DataType="string" Value="GUID"/>
            </InputParameters>
            <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation>
    
        <ClaimsTransformation Id="CreateDisplayNameTransformation" TransformationMethod="FormatStringMultipleClaims">
            <InputClaims>
            <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1"/>
            <InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="inputClaim2"/>
            </InputClaims>
            <InputParameters>
            <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}"/>
            </InputParameters>
            <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation>
    
        <ClaimsTransformation Id="CreateMessageTransformation" TransformationMethod="FormatStringClaim">
            <InputClaims>
            <InputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="inputClaim"/>
            </InputClaims>
            <InputParameters>
            <InputParameter Id="stringFormat" DataType="string" Value="Hello {0}"/>
            </InputParameters>
            <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation> 
    

    Nakonfigurovali jsme tři transformace deklarací identity:

    • GenerateRandomObjectIdTransformation generuje náhodný řetězec zadaný Metodou CreateRandomString . Deklarace identity objectId se aktualizuje o vygenerovaný řetězec, jak je určeno elementem OutputClaim .

    • CreateDisplayNameTransformation zřetězí givenName a příjmení pro formulář displayName.

    • CreateMessageTransformation zřetězí Hello a displayName pro vytvoření zprávy.

Krok 3 – Konfigurace definic obsahu

ContentDefinitions umožňuje zadat adresu URL šablon HTML, které řídí rozložení webových stránek, které se zobrazují uživatelům. Pro každý krok můžete zadat konkrétní uživatelská rozhraní, jako je přihlášení nebo registrace, resetování hesla nebo chybové stránky.

Pokud chcete přidat definici obsahu, přidejte do BuildingBlocks části ContosoCustomPolicy.XML souboru následující kód:

    <ContentDefinitions>
        <ContentDefinition Id="SelfAssertedContentDefinition">
            <LoadUri>~/tenant/templates/AzureBlue/selfAsserted.cshtml</LoadUri>
            <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
            <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7</DataUri>
        </ContentDefinition>
    </ContentDefinitions>

Krok 4 – Konfigurace technických profilů

Ve vlastních zásadách je TechnicalProfile element, který implementuje funkce. Teď, když jste definovali deklarace identity a transformace deklarací identity, potřebujete k provedení definic technické profily. Technický profil je deklarován uvnitř ClaimsProvider prvků.

Azure AD B2C poskytuje sadu technických profilů. Každý technický profil provádí určitou roli. K volání koncového bodu služby například použijete technický profil REST. K provedení operace, kterou definujete v transformaci deklarací identity, můžete použít technický profil transformace deklarací identity. Přečtěte si další informace o typech technických profilů , které poskytují vlastní zásady Azure AD B2C.

Nastavení hodnot pro deklarace identity

Chcete-li nastavit hodnoty pro objectId, displayName a message deklarace identity, nakonfigurujete technický profil, který spouští GenerateRandomObjectIdTransformation, CreateDisplayNameTransformation a CreateMessageTransformation deklarace identity. Transformace deklarací identity se provádějí podle pořadí definovaného v elementu OutputClaimsTransformations . Například nejprve vytvoří zobrazovaný název a pak zprávu.

  1. Přidejte následující ClaimsProvider položky jako podřízenou ClaimsProviders část.

        <ClaimsProvider>
    
            <DisplayName>Technical Profiles to generate claims</DisplayName>
        </ClaimsProvider>
    
    
  2. Pokud chcete nastavit hodnoty pro objectId, displayName a deklarace identity zpráv, přidejte do právě vytvořeného elementu ClaimsProvider následující kód:

        <!--<ClaimsProvider>-->
            <TechnicalProfiles>
                <TechnicalProfile Id="ClaimGenerator">
                    <DisplayName>Generate Object ID, displayName and message Claims Technical Profile.</DisplayName>
                    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="objectId"/>
                        <OutputClaim ClaimTypeReferenceId="displayName"/>
                        <OutputClaim ClaimTypeReferenceId="message"/>
                    </OutputClaims>
                    <OutputClaimsTransformations>
                        <OutputClaimsTransformation ReferenceId="GenerateRandomObjectIdTransformation"/>
                        <OutputClaimsTransformation ReferenceId="CreateDisplayNameTransformation"/>
                        <OutputClaimsTransformation ReferenceId="CreateMessageTransformation"/>
                    </OutputClaimsTransformations>
                </TechnicalProfile>
            </TechnicalProfiles>
        <!--</ClaimsProvider>-->
    

Shromažďování uživatelských vstupů

Vygenerujete deklaraci identity displayName z givenName a příjmení, takže je potřeba shromáždit poté jako vstupy uživatele. Chcete-li shromáždit uživatelský vstup, použijte typ technického profilu s názvem Self-Asserted. Když nakonfigurujete technický profil s vlastním kontrolním výrazem, musíte odkazovat na definice obsahu jako technický profil s vlastním kontrolním výrazem, který je zodpovědný za zobrazení uživatelského rozhraní.

  1. Přidejte následující ClaimsProvider položky jako podřízenou ClaimsProviders část.

        <ClaimsProvider>
    
            <DisplayName>Technical Profiles to collect user's details </DisplayName>
        </ClaimsProvider>
    
  2. Do právě vytvořeného elementu ClaimsProvider přidejte následující kód:

        <TechnicalProfiles>
            <TechnicalProfile Id="UserInformationCollector">
                <DisplayName>Collect User Input Technical Profile</DisplayName>
                <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                <Metadata>
                    <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item>
                </Metadata>
                <DisplayClaims>
                    <DisplayClaim ClaimTypeReferenceId="givenName" Required="true"/>
                    <DisplayClaim ClaimTypeReferenceId="surname" Required="true"/>
                </DisplayClaims>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="givenName"/>
                    <OutputClaim ClaimTypeReferenceId="surname"/>
                </OutputClaims>
            </TechnicalProfile>
        </TechnicalProfiles>
    

    Všimněte si dvou zobrazených deklarací pro dané jméno a příjmení . Obě deklarace identity jsou označené jako povinné, takže uživatel musí zadat hodnoty před odesláním formuláře, který se mu zobrazí. Deklarace identity se zobrazí na obrazovce v pořadí definovaném v prvku DisplayClaims , jako je například Given Name a pak Příjmení.

Krok 5 : Definování cest uživatelů

Cesty uživatelů slouží k definování pořadí, ve kterém se volají technické profily. Tento OrchestrationSteps prvek slouží k určení kroků na cestě uživatele.

Nahraďte stávající obsah HelloWorldJourney cesty uživatele následujícím kódem:

    <OrchestrationSteps>
        <OrchestrationStep Order="1" Type="ClaimsExchange">
            <ClaimsExchanges>
                <ClaimsExchange Id="GetUserInformationClaimsExchange" TechnicalProfileReferenceId="UserInformationCollector"/>
            </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="2" Type="ClaimsExchange">
            <ClaimsExchanges>
                <ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="ClaimGenerator"/>
            </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer"/>
    </OrchestrationSteps>

Podle kroků orchestrace shromažďujeme vstupy uživatelů, nastavíme hodnoty pro objectId, displayName a deklarace identity zpráv a nakonec odešleme token Jwt.

Krok 6 – aktualizace předávající strany

Obsah prvku oddílu OutputClaimsRelyingParty nahraďte následujícím kódem:

    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
    <OutputClaim ClaimTypeReferenceId="displayName"/>
    <OutputClaim ClaimTypeReferenceId="message"/>

Po dokončení kroku 6ContosoCustomPolicy.XML by měl soubor vypadat podobně jako následující kód:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" 
    PolicySchemaVersion="0.3.0.0" TenantId="yourtenant.onmicrosoft.com" 
    PolicyId="B2C_1A_ContosoCustomPolicy" 
    PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
    
    <BuildingBlocks>
        <ClaimsSchema>
            <ClaimType Id="objectId">
                <DisplayName>unique object Id for subject of the claims being returned</DisplayName>
                <DataType>string</DataType>
            </ClaimType>
            <ClaimType Id="message">
                <DisplayName>Will hold Hello World message</DisplayName>
                <DataType>string</DataType>
            </ClaimType>

            <ClaimType Id="givenName">
                <DisplayName>Given Name</DisplayName>
                <DataType>string</DataType>
                <UserHelpText>Your given name (also known as first name).</UserHelpText>
                <UserInputType>TextBox</UserInputType>
            </ClaimType>
            <ClaimType Id="surname">
                <DisplayName>Surname</DisplayName>
                <DataType>string</DataType>
                <UserHelpText>Your surname (also known as family name or last name).</UserHelpText>
                <UserInputType>TextBox</UserInputType>
            </ClaimType>
            <ClaimType Id="displayName">
                <DisplayName>Display Name</DisplayName>
                <DataType>string</DataType>
                <UserHelpText>Your display name.</UserHelpText>
                <UserInputType>TextBox</UserInputType>
            </ClaimType>
        </ClaimsSchema>
        <ClaimsTransformations>
            <ClaimsTransformation Id="GenerateRandomObjectIdTransformation" TransformationMethod="CreateRandomString">
                <InputParameters>
                    <InputParameter Id="randomGeneratorType" DataType="string" Value="GUID"/>
                </InputParameters>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="outputClaim"/>
                </OutputClaims>
            </ClaimsTransformation>

            <ClaimsTransformation Id="CreateDisplayNameTransformation" TransformationMethod="FormatStringMultipleClaims">
                <InputClaims>
                    <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1"/>
                    <InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="inputClaim2"/>
                </InputClaims>
                <InputParameters>
                    <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}"/>
                </InputParameters>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim"/>
                </OutputClaims>
            </ClaimsTransformation>

            <ClaimsTransformation Id="CreateMessageTransformation" TransformationMethod="FormatStringClaim">
                <InputClaims>
                    <InputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="inputClaim"/>
                </InputClaims>
                <InputParameters>
                    <InputParameter Id="stringFormat" DataType="string" Value="Hello {0}"/>
                </InputParameters>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="outputClaim"/>
                </OutputClaims>
            </ClaimsTransformation> 
        </ClaimsTransformations>
        <ContentDefinitions>
            <ContentDefinition Id="SelfAssertedContentDefinition">
                <LoadUri>~/tenant/templates/AzureBlue/selfAsserted.cshtml</LoadUri>
                <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
                <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7</DataUri>
            </ContentDefinition>
        </ContentDefinitions>
    </BuildingBlocks>
    <!--Claims Providers Here-->
    <ClaimsProviders>
        <ClaimsProvider>
            <DisplayName>Token Issuer</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="JwtIssuer">
                    <DisplayName>JWT Issuer</DisplayName>
                    <Protocol Name="None"/>
                    <OutputTokenFormat>JWT</OutputTokenFormat>
                    <Metadata>
                        <Item Key="client_id">{service:te}</Item>
                        <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
                        <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
                    </Metadata>
                    <CryptographicKeys>
                        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer"/>
                        <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer"/>
                    </CryptographicKeys>
                </TechnicalProfile>
            </TechnicalProfiles>
        </ClaimsProvider>

        <ClaimsProvider>
            <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
                    <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
                    <Protocol Name="None"/>
                    <Metadata>
                        <Item Key="url">{service:te}</Item>
                    </Metadata>
                </TechnicalProfile>
            </TechnicalProfiles>
        </ClaimsProvider>

        <ClaimsProvider>
            <DisplayName>Claim Generator Technical Profiles</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="ClaimGenerator">
                    <DisplayName>Generate Object ID, displayName and  message Claims Technical Profile.</DisplayName>
                    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="objectId"/>
                        <OutputClaim ClaimTypeReferenceId="displayName"/>
                        <OutputClaim ClaimTypeReferenceId="message"/>
                    </OutputClaims>
                    <OutputClaimsTransformations>
                        <OutputClaimsTransformation ReferenceId="GenerateRandomObjectIdTransformation"/>
                        <OutputClaimsTransformation ReferenceId="CreateDisplayNameTransformation"/>
                        <OutputClaimsTransformation ReferenceId="CreateMessageTransformation"/>
                    </OutputClaimsTransformations>
                </TechnicalProfile>
            </TechnicalProfiles>            
        </ClaimsProvider>

        <ClaimsProvider>
            <DisplayName>Technical Profiles to collect user's details</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="UserInformationCollector">
                    <DisplayName>Collect User Input Technical Profile</DisplayName>
                    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                    <Metadata>
                        <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item>
                    </Metadata>
                    <DisplayClaims>
                        <DisplayClaim ClaimTypeReferenceId="givenName" Required="true"/>
                        <DisplayClaim ClaimTypeReferenceId="surname" Required="true"/>
                    </DisplayClaims>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="givenName"/>
                        <OutputClaim ClaimTypeReferenceId="surname"/>
                    </OutputClaims>
                </TechnicalProfile>
            </TechnicalProfiles>
        </ClaimsProvider>
    </ClaimsProviders>

    <UserJourneys>
        <UserJourney Id="HelloWorldJourney">
            <OrchestrationSteps>
                <OrchestrationStep Order="1" Type="ClaimsExchange">
                    <ClaimsExchanges>
                        <ClaimsExchange Id="GetUserInformationClaimsExchange" TechnicalProfileReferenceId="UserInformationCollector"/>
                    </ClaimsExchanges>
                </OrchestrationStep>
                <OrchestrationStep Order="2" Type="ClaimsExchange">
                    <ClaimsExchanges>
                        <ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="ClaimGenerator"/>
                    </ClaimsExchanges>
                </OrchestrationStep>
                <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer"/>
            </OrchestrationSteps>
        </UserJourney>
    </UserJourneys>

    <RelyingParty><!-- 
            Relying Party Here that's your policy’s entry point
            Specify the User Journey to execute 
            Specify the claims to include in the token that is returned when the policy runs
        -->
        <DefaultUserJourney ReferenceId="HelloWorldJourney"/>
        <TechnicalProfile Id="HelloWorldPolicyProfile">
            <DisplayName>Hello World Policy Profile</DisplayName>
            <Protocol Name="OpenIdConnect"/>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
                <OutputClaim ClaimTypeReferenceId="displayName"/>
                <OutputClaim ClaimTypeReferenceId="message"/>
            </OutputClaims>
            <SubjectNamingInfo ClaimType="sub"/>
        </TechnicalProfile>
    </RelyingParty>
</TrustFrameworkPolicy>

Pokud jste to ještě neudělali, nahraďte yourtenant část subdomény vašeho názvu tenanta, například contoso. Zjistěte, jak získat název tenanta.

Krok 3 : Nahrání souboru vlastních zásad

Postupujte podle kroků v nahrání souboru vlastních zásad. Pokud nahráváte soubor se stejným názvem jako soubor, který už je na portálu, nezapomeňte vybrat Možnost Přepsat vlastní zásadu, pokud už existuje.

Krok 4 – Testování vlastních zásad

  1. V části Vlastní zásady vyberte B2C_1A_CONTOSOCUSTOMPOLICY.

  2. V části Vybrat aplikaci na stránce přehledu vlastních zásad vyberte webovou aplikaci, například webovou aplikaci1 , kterou jste předtím zaregistrovali. Ujistěte se, že je nastavená https://jwt.mshodnota Vybrat adresu URL odpovědi.

  3. Vyberte tlačítko Spustit.

  4. Zadejte zadané jméno a příjmení a pak vyberte Pokračovat.

    screenshot of accepting user inputs in custom policy.

Po dokončení provádění zásady budete přesměrováni na https://jwt.msa zobrazí se dekódovaný token JWT. Vypadá podobně jako následující fragment kódu tokenu JWT:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "c7ae4515-f7a7....",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "name": "Maurice Paulet",
      "message": "Hello Maurice Paulet"
    }.[Signature]

Další kroky

Dále se dozvíte: