Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
Si aún no tiene una, cree un inquilino de Azure AD B2C que esté vinculado a su suscripción de Azure.
Debe tener Visual Studio Code (VS Code) instalado en el equipo.
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:
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.
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
En VS Code, cree y abra el archivo
ContosoCustomPolicy.XML
.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, comocontoso
. 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.Para declarar una notificación, agregue el código siguiente en la sección
BuildingBlocks
del archivoContosoCustomPolicy.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.
En la
ClaimsProviders
sección delContosoCustomPolicy.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 elStorageReferenceId
.En la
UserJourneys
sección delContosoCustomPolicy.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.
En la
RelyingParty
sección delContosoCustomPolicy.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
- Inicie sesión en Azure Portal.
- 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.
- En Azure Portal, busque y seleccione Azure AD B2C.
- En el menú de la izquierda, en Directivas, seleccione Identity Experience Framework.
- 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
- En Directivas personalizadas, seleccione B2C_1A_CONTOSOCUSTOMPOLICY.
- 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 en
https://jwt.ms
. - 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 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
.
Contenido relacionado
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:
Procedimientos para recopilar y usar entradas de usuario mediante la directiva personalizada.
Acerca de la información general sobre las notificaciones de directivas personalizadas.
Acerca del tipo de datos de las notificaciones de directivas personalizadas.
Acerca de los tipos de entrada de usuario de directivas personalizadas.