Compartir vía


Escriba su primera directiva personalizada de Azure Active Directory B2C: Hola mundo.

En la aplicación puede usar flujos de usuario que permitan a los usuarios registrarse, iniciar sesión o administrar su perfil. Cuando los flujos de usuario no cubren todas las necesidades específicas de su empresa, puede usar directivas personalizadas.

Aunque puede usar el paquete de inicio de directivas personalizadas creadas previamente para escribir directivas personalizadas, es importante comprender cómo se crea una directiva personalizada. En este artículo descubrirá cómo crear su primera directiva personalizada desde cero.

Requisitos previos

Nota

Este artículo forma parte de la Serie de guías paso a paso para crear y ejecutar sus propias directivas personalizadas en Azure Active Directory B2C. Le recomendamos que empiece esta serie por el primer artículo.

Paso 1: Configurar las claves de firma y cifrado

Si aún no lo ha hecho, cree las claves de cifrado siguientes. Para automatizar el tutorial siguiente, visite la aplicación de configuración de IEF y siga las instrucciones:

  1. Siga los pasos descritos en Incorporación de claves de firma y cifrado para las aplicaciones de Identity Experience Framework a fin de crear la clave de firma.

  2. Siga los pasos descritos en Incorporación de claves de firma y cifrado para las aplicaciones de Identity Experience Framework a fin de crear la clave de cifrado.

Paso 2: Crear el archivo de directiva personalizada

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

  2. En el archivo ContosoCustomPolicy.XML, agregue el 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>
                <!-- Building Blocks Here-->
            </BuildingBlocks>
    
            <ClaimsProviders>
                <!-- Claims Providers Here-->
            </ClaimsProviders>
    
            <UserJourneys>
                <!-- User Journeys Here-->
            </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
                -->
            </RelyingParty>
        </TrustFrameworkPolicy>
    
    

    Reemplace yourtenant por la parte del subdominio del nombre del inquilino, como contoso. Obtenga información sobre la Obtención del nombre del inquilino.

    Los elementos XML definen el elemento TrustFrameworkPolicy de nivel superior de un archivo de directiva con su id. de directiva y su nombre de inquilino. El elemento TrustFrameworkPolicy contiene otros elementos XML que usará en esta serie.

  3. Para declarar una notificación, agregue el código siguiente en la sección BuildingBlocks del archivo ContosoCustomPolicy.XML:

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

    Una notificación es como una variable. La declaración de la notificación también muestra el tipo de datos de esta.

  4. En la sección ClaimsProviders del archivo ContosoCustomPolicy.XML, agregue el código siguiente:

        <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>
          <!-- The technical profile(s) defined in this section is required by the framework to be included in all custom policies. -->
          <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>
    

    Hemos declarado un emisor de tokens JWT. En la sección CryptographicKeys, si usó nombres diferentes a fin de configurar las claves de firma y cifrado en el paso 1, asegúrese de usar el valor correcto para StorageReferenceId.

  5. En la sección UserJourneys del archivo ContosoCustomPolicy.XML, agregue el código siguiente:

      <UserJourney Id="HelloWorldJourney">
        <OrchestrationSteps>
          <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
        </OrchestrationSteps>
      </UserJourney>
    

    Hemos agregado un elemento UserJourney. El recorrido del usuario especifica la lógica de negocios por la que pasa el usuario final conforme Azure AD B2C procesa una solicitud. Este recorrido del usuario solo tiene un paso que emite un token JTW con las notificaciones que definirá en el paso siguiente.

  6. En la sección RelyingParty del archivo ContosoCustomPolicy.XML, agregue el código siguiente:

      <DefaultUserJourney ReferenceId="HelloWorldJourney"/>
      <TechnicalProfile Id="HelloWorldPolicyProfile">
        <DisplayName>Hello World Policy Profile</DisplayName>
        <Protocol Name="OpenIdConnect" />
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
          <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
        </OutputClaims>
        <SubjectNamingInfo ClaimType="sub" />
      </TechnicalProfile>
    

    La sección RelyingParty es el punto de entrada de la directiva. Especifica el elemento UserJourney que se va a ejecutar y las notificaciones que se van a incluir en el token que se devuelve cuando se ejecuta la directiva.

Después de completar el paso 2, el archivo ContosoCustomPolicy.XML debe ser 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="Contosob2c2233.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://Contosob2c2233.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>
            </ClaimsSchema>
        </BuildingBlocks>
        <ClaimsProviders><!--Claims Providers Here-->
            <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>
        </ClaimsProviders>
      <UserJourneys>
        <UserJourney Id="HelloWorldJourney">
          <OrchestrationSteps>
            <OrchestrationStep Order="1" 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" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
                    <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
                </OutputClaims>
                <SubjectNamingInfo ClaimType="sub"/>
            </TechnicalProfile>
        </RelyingParty>
    </TrustFrameworkPolicy>

Paso 3: Cargar el archivo de directiva personalizado

  1. Inicie sesión en Azure Portal.
  2. Si tiene acceso a varios inquilinos, seleccione el icono Configuración en el menú superior para cambiar al inquilino de Azure AD B2C desde el menú Directorios y suscripciones.
  3. En Azure Portal, busque y seleccione Azure AD B2C.
  4. En el menú de la izquierda, en Directivas, seleccione Identity Experience Framework.
  5. Seleccione Cargar directiva personalizada, busque y cargue el archivo ContosoCustomPolicy.XML.

Después de cargar el archivo, Azure AD B2C agrega el prefijo B2C_1A_, por lo que los nombres son similares a B2C_1A_CONTOSOCUSTOMPOLICY.

Paso 4: Probar la directiva personalizada

  1. En Directivas personalizadas, seleccione B2C_1A_CONTOSOCUSTOMPOLICY.
  2. Para Seleccionar aplicación en la página Información general de la directiva personalizada, seleccione la aplicación web como webapp1 que ha registrado antes. Asegúrese de que el valor Seleccionar dirección URL de respuesta está establecido en https://jwt.ms.
  3. Seleccione el botón Ejecutar ahora.

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

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "abcd-1234-efgh-5678-ijkl-etc.",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "message": "Hello World!"
    }.[Signature]

Observe las notificaciones message y sub, que se establecen como notificaciones de salida en la sección RelyingParty.

Pasos siguientes

En este artículo, ha descubierto cuatro secciones que se incluyen en una directiva personalizada de Azure AD B2C y las ha usado. Estas secciones se agregan como elementos secundarios al elemento raíz TrustFrameworkPolicy:

  • BuildingBlocks
  • ClaimsProviders
  • UserJourneys
  • RelyingParty

A continuación, descubra lo siguiente: