Compartir a través de


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

Importante

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

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 personalizado predefinido para escribir directivas personalizadas, es importante comprender cómo se crea una directiva personalizada. En este artículo, aprenderá a crear su primera directiva personalizada desde cero.

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: Configuración de las claves de firma y cifrado

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

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

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

Paso 2: Compilación del archivo de directiva personalizado

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

  2. En el ContosoCustomPolicy.XML archivo, 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 cómo obtener el nombre del inquilino.

    Los elementos XML definen el elemento de nivel TrustFrameworkPolicy superior de un archivo de directiva con su identificador 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 reclamación es como una variable. La declaración de la notificación también muestra el tipo de datos de la notificación.

  4. En la ClaimsProviders sección del ContosoCustomPolicy.XML archivo, 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 JWT. En la CryptographicKeys sección, si utilizó nombres diferentes para configurar las claves de firma y cifrado en el paso 1, asegúrese de usar el valor correcto para el StorageReferenceId.

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

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

    Hemos agregado un UserJourney. El recorrido del usuario especifica la lógica de negocios a la que pasa el usuario final a medida que Azure AD B2C procesa una solicitud. Este recorrido del usuario solo tiene un paso, el cual emite un token JWT con las reclamaciones que definirá en el siguiente paso.

  6. En la RelyingParty sección del ContosoCustomPolicy.XML archivo, 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 ContosoCustomPolicy.XML archivo 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: Carga del 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 a su 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 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 .

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": "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.

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

  • BuildingBlocks
  • ClaimsProviders
  • Recorridos del Usuario
  • Fiesta de confianza

A continuación, aprenda: