Compartir a través de


Recopilación y manipulación de entradas de usuario mediante la directiva personalizada de Azure Active Directory B2C

Importante

A partir del 1 de mayo de 2025, Azure AD B2C ya no estará disponible para la compra por parte de nuevos clientes. Obtenga más información en nuestras preguntas más frecuentes.

Las directivas personalizadas de Azure Active Directory B2C (Azure AD B2C) permiten recopilar entradas de usuario. A continuación, puede utilizar métodos incorporados para manipular las entradas del usuario.

En este artículo, aprenderá a escribir una política personalizada que recopile las entradas del usuario a través de una interfaz gráfica de usuario. A continuación, accederá a las entradas, las procesará y, por último, las devolverá como notificaciones en un JWT. Para completar esta tarea, deberá:

  • Declarar reclamaciones. Una notificación proporciona un almacenamiento temporal de datos durante la ejecución de una directiva de Azure AD B2C. Puede almacenar información sobre el usuario, como nombre, apellido o cualquier otra reclamación obtenida del usuario u otros sistemas. Puede obtener más información sobre las notificaciones en la información general sobre la directiva personalizada de Azure AD B2C.

  • Definir perfiles técnicos. Un perfil técnico proporciona una interfaz para comunicarse con diferentes tipos de partes. Por ejemplo, permite interactuar con el usuario para recopilar datos.

  • Configure las transformaciones de notificaciones, que se utilizan para manipular las notificaciones que declara.

  • Configurar definiciones de contenido. Una definición de contenido define la interfaz de usuario que se va a cargar. Más adelante, puede personalizar la interfaz de usuario proporcionando su propio contenido HTML personalizado.

  • Configure y muestre interfaces de usuario al usuario mediante Self-Asserted Technical Profiles y DisplayClaims.

  • Llame a los perfiles técnicos en una secuencia determinada mediante los pasos de orquestación.

Prerrequisitos

Nota:

Este artículo forma parte de la serie de guías paso a paso Crear y ejecutar sus propias directivas personalizadas en Azure Active Directory B2C. Se recomienda iniciar esta serie desde el primer artículo.

Paso 1: Declarar reclamaciones

Declare notificaciones adicionales junto con objectId y message:

  1. En VS Code, abra el ContosoCustomPolicy.XML archivo.

  2. En la ClaimsSchema sección, agregue las siguientes declaraciones 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>
    

Hemos declarado tres tipos de notificación, givenName, surname y displayName. Estas declaraciones incluyen DataType, UserInputType y DisplayName elementos:

  • DataType especifica el tipo de datos del valor que contienen las notificaciones. Obtenga más información sobre los tipos de datos que admiten los elementos DataType.
  • UserInputType especifica el control de interfaz de usuario que aparece en la interfaz de usuario si desea recopilar el valor de la notificación del usuario. Obtenga más información sobre los tipos de entrada de usuario que admite Azure AD B2C.
  • DisplayName especifica la etiqueta del control de interfaz de usuario que aparece en la interfaz de usuario si desea recopilar el valor de la notificación del usuario.

Paso 2: Definición de transformaciones de reclamaciones

ClaimsTransformation contiene una función que se usa para convertir una notificación determinada en otra. Por ejemplo, puede cambiar una notificación de cadena de minúsculas a mayúsculas. Obtenga más información sobre las transformaciones de notificaciones compatibles con Azure AD B2C.

  1. En el ContosoCustomPolicy.XML archivo, agregue un <ClaimsTransformations> elemento como elemento secundario de la BuildingBlocks sección.

        <ClaimsTransformations>
    
        </ClaimsTransformations>
    
  2. Agregue el siguiente código dentro del ClaimsTransformations elemento:

        <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> 
    

    Hemos configurado tres transformaciones de notificaciones:

    • GenerateRandomObjectIdTransformation genera una cadena aleatoria según lo especificado por el método CreateRandomString . La notificación objectId se actualiza con la cadena generada según lo especificado por el OutputClaim elemento.

    • CreateDisplayNameTransformation concatena givenName y surname para formar displayName.

    • CreateMessageTransformation concatena Hello y displayName para formar un mensaje.

Paso 3: Configurar definiciones de contenido

ContentDefinitions permite especificar direcciones URL a plantillas HTML que controlan el diseño de las páginas web que se muestran a los usuarios. Puede especificar interfaces de usuario específicas para cada paso, como inicio de sesión o registro, restablecimiento de contraseña o páginas de error.

Para agregar definición de contenido, agregue el siguiente código en BuildingBlocks la sección del ContosoCustomPolicy.XML archivo:

    <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>

Paso 4 - Configurar los perfiles técnicos

En una política personalizada, TechnicalProfile es el elemento que implementa la funcionalidad. Ahora que ha definido las notificaciones y las transformaciones de notificaciones, necesita perfiles técnicos para ejecutar las definiciones. Se declara un perfil técnico dentro de los ClaimsProvider elementos.

Azure AD B2C proporciona un conjunto de perfiles técnicos. Cada perfil técnico desempeña una función específica. Por ejemplo, se utiliza un perfil técnico REST para realizar una llamada HTTP a un punto de conexión de servicio. Puede utilizar un perfil técnico de transformación de notificaciones para ejecutar la operación que defina en una transformación de notificaciones. Obtenga más información sobre los tipos de perfiles técnicos que proporcionan las directivas personalizadas de Azure AD B2C.

Establecer valores para las notificaciones

Para establecer los valores de las notificaciones objectId, displayName y message , configure un perfil técnico que ejecute las transformaciones de notificaciones GenerateRandomObjectIdTransformation, CreateDisplayNameTransformation y CreateMessageTransformation . Las transformaciones de notificaciones se ejecutan según el orden definido en el OutputClaimsTransformations elemento. Por ejemplo, primero crea el nombre para mostrar y, a continuación, el mensaje.

  1. Agregue lo siguiente ClaimsProvider como elemento secundario de la ClaimsProviders sección.

        <ClaimsProvider>
    
            <DisplayName>Technical Profiles to generate claims</DisplayName>
        </ClaimsProvider>
    
    
  2. Para establecer los valores de objectId, displayName y las notificaciones message , agregue el siguiente código dentro del elemento que acaba de ClaimsProvider crear:

        <!--<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>-->
    

Recopilación de entradas de usuario

La notificación displayName se genera a partir de givenName y surname, por lo que debe recopilarla como entradas de usuario. Para recopilar una entrada de usuario, se utiliza un tipo de perfil técnico denominado Autoafirmado. Al configurar un perfil técnico autoafirmado, debe hacer referencia a las definiciones de contenido, ya que el perfil técnico autoafirmado es responsable de mostrar una interfaz de usuario.

  1. Agregue lo siguiente ClaimsProvider como elemento secundario de la ClaimsProviders sección.

        <ClaimsProvider>
    
            <DisplayName>Technical Profiles to collect user's details </DisplayName>
        </ClaimsProvider>
    
  2. Agregue el siguiente código dentro del elemento que acaba de ClaimsProvider crear:

        <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>
    

    Observe las dos notificaciones de visualización para las notificaciones givenName y surname . Ambas notificaciones están marcadas como obligatorias, por lo que el usuario debe escribir los valores antes de enviar el formulario que se le muestra. Las notificaciones se muestran en la pantalla en el orden definido en el elemento DisplayClaims , como el nombre de pila y, a continuación, el apellido.

Paso 5 - Definir los recorridos de los usuarios

Los recorridos de usuario se utilizan para definir el orden en el que se llama a los perfiles técnicos. El elemento se utiliza OrchestrationSteps para especificar los pasos de un recorrido de usuario.

Reemplace el contenido existente del recorrido del HelloWorldJourney usuario por el siguiente código:

    <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>

De acuerdo con los pasos de orquestación, recopilamos las entradas del usuario, establecemos valores para objectId, displayName y notificaciones de mensaje y, por último, enviamos el JWT.

Paso 6: Actualizar usuario de confianza

Reemplace el contenido del OutputClaims elemento de la RelyingParty sección por el siguiente código:

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

Después de completar el paso 6, el ContosoCustomPolicy.XML archivo debe tener un aspecto similar al código siguiente:

<?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>

Si aún no lo ha hecho, reemplácelo yourtenant por la parte del subdominio del nombre del inquilino, como contoso. Obtenga información sobre cómo obtener el nombre del inquilino.

Paso 7: Cargar el archivo de política personalizada

Siga los pasos descritos en Cargar archivo de política personalizada. Si va a cargar un archivo con el mismo nombre que el que ya está en el portal, asegúrese de seleccionar Sobrescribir la directiva personalizada si ya existe.

Paso 8: Probar la política personalizada

  1. En Directivas personalizadas, seleccione B2C_1A_CONTOSOCUSTOMPOLICY.

  2. Para Seleccionar aplicación en la página de información general de la directiva personalizada, seleccione la aplicación web, como webapp1 que registró anteriormente. Asegúrese de que el valor Select reply URL (Seleccionar dirección URL de respuesta ) esté establecido enhttps://jwt.ms.

  3. Seleccione el botón Ejecutar ahora .

  4. Escriba Nombre y apellidos y, a continuación, seleccione Continuar.

    Captura de pantalla de la aceptación de entradas de usuario en la política personalizada.

Una vez finalizada la ejecución de la directiva, se le redirigirá a https://jwt.msy verá un JWT descodificado. Tiene un aspecto similar al siguiente fragmento de código JWT:

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

A continuación, aprenda: