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
Si todavía no tiene uno, cree un inquilino de Azure AD B2C vinculado a la suscripción de Azure.
Registre una aplicación web y habilite la concesión implícita del token de identificador. Para el URI de redirección, use https://jwt.ms.
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 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:
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.
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
En VS Code, cree y abra el archivo
ContosoCustomPolicy.XML
.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, comocontoso
. 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.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 notificación es como una variable. La declaración de la notificación también muestra el tipo de datos de esta.
En la sección
ClaimsProviders
del archivoContosoCustomPolicy.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 paraStorageReferenceId
.En la sección
UserJourneys
del archivoContosoCustomPolicy.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.
En la sección
RelyingParty
del archivoContosoCustomPolicy.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
- Inicie sesión en Azure Portal.
- 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.
- 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 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
. - 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:
Procedimientos para recopilar y usar entradas de usuario mediante la directiva personalizada.
Acerca de la información general sobre las notificaciones de directivas personalizadas.
Procedimientos para declarar una notificación de directiva personalizada.
Acerca del tipo de datos de las notificaciones de directivas personalizadas.
Acerca de los tipos de entrada de usuario de directivas personalizadas.