Escreva sua primeira política personalizada do Azure Active Directory B2C – Olá, Mundo!
Em seu aplicativo, você pode usar fluxos de usuário que permitem aos usuários se inscreverem, se conectarem ou gerenciarem seus perfis. Quando os fluxos de usuário não abrangerem todas as suas necessidades comerciais específicas, é possível usar políticas personalizadas.
Embora você possa usar o pacote inicial de política personalizada predefinido para escrever políticas personalizadas, é importante entender como uma política personalizada é criada. Neste artigo, você aprende como criar sua primeira política personalizada do zero.
Pré-requisitos
Se ainda não tiver um, você precisará criar um locatário do Azure AD B2C que esteja vinculado à sua assinatura do Azure.
Registre um aplicativo Web e habilite a concessão implícita de token de ID. Para o URI de redirecionamento, use https://jwt.ms.
Você deve ter o Visual Studio Code (VS Code) instalado em seu computador.
Observação
Este artigo faz parte da série de guias de instruções Criar e executar suas próprias políticas personalizadas no Azure Active Directory B2C. Recomendamos que você comece essa série com o primeiro artigo.
Etapa 1 – Configurar as chaves de assinatura e criptografia
Se você ainda não fez isso, crie as chaves de criptografia a seguir. Para automatizar o passo a passo abaixo, visite o Aplicativo de Configuração do IEF e siga as instruções:
Use as etapas descritas em Adicionar chaves de assinatura e criptografia para aplicativos Identity Experience Framework para criar a chave de assinatura.
Use as etapas descritas em Adicionar chaves de assinatura e criptografia para aplicativos Identity Experience Framework para criar a chave de criptografia.
Etapa 2 – Criar o arquivo de política personalizado
No VS Code, crie e abra o arquivo
ContosoCustomPolicy.XML
.No arquivo
ContosoCustomPolicy.XML
, adicione o seguinte código:<?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>
Substitua
yourtenant
pela parte do subdomínio do nome do locatário, comocontoso
. Saiba como Obter o nome do locatário.Os elementos XML definem o elemento
TrustFrameworkPolicy
de nível superior de um arquivo de política com a ID de política e o nome do locatário. O elemento TrustFrameworkPolicy contém outros elementos XML que você usará nesta série.Para declarar uma declaração, adicione o seguinte código na seção
BuildingBlocks
do arquivoContosoCustomPolicy.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>
Uma declaração é como uma variável. A declaração da declaração também mostra o tipo de dados da declaração.
Na seção
ClaimsProviders
do arquivoContosoCustomPolicy.XML
, adicione o seguinte código:<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>
Declaramos um Emissor de Token JWT. Na seção
CryptographicKeys
, se você usou nomes diferentes para configurar as chaves de assinatura e criptografia na etapa 1, lembre-se de usar o valor correto para aStorageReferenceId
.Na seção
UserJourneys
do arquivoContosoCustomPolicy.XML
, adicione o seguinte código:<UserJourney Id="HelloWorldJourney"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
Adicionamos um UserJourney. O percurso do usuário especifica a lógica de negócios pela qual o usuário final passa à medida que o Azure AD B2C processa uma solicitação. Esse percurso do usuário tem apenas uma etapa que emite um token JTW com as declarações que você definirá na próxima etapa.
Na seção
RelyingParty
do arquivoContosoCustomPolicy.XML
, adicione o seguinte código:<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>
A seção RelyingParty é o ponto de entrada da política. Ela especifica o UserJourney a ser executado e as declarações a serem incluídas no token retornado quando a política for executada.
Depois que você concluir a etapa 2, o arquivo ContosoCustomPolicy.XML
será parecido com o seguinte código:
<?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>
Etapa 3 - Carregar o arquivo da política personalizada
- Entre no portal do Azure.
- Se você tiver acesso a vários locatários, selecione o ícone Configurações no menu superior para alternar para o locatário do Azure AD B2C no menu Diretórios + assinaturas.
- No portal do Azure, pesquise e selecione Azure AD B2C.
- No menu à esquerda, em Políticas, selecione Identity Experience Framework.
- Escolha Carregar política personalizada, procure Selecionar e carregue o arquivo
ContosoCustomPolicy.XML
.
Depois que você carregar o arquivo, o Azure AD B2C adicionará o prefixo B2C_1A_
. Portanto, os nomes são semelhantes a B2C_1A_CONTOSOCUSTOMPOLICY.
Etapa 4 - Testar a política personalizada
- Em Políticas personalizadas, selecione B2C_1A_CONTOSOCUSTOMPOLICY.
- Em Selecionar aplicativo na página de visão geral da política personalizada, selecione o aplicativo Web chamado webapp1 que você registrou anteriormente. Verifique se o valor Selecionar URL de resposta está definido como
https://jwt.ms
. - Selecione o botão Executar agora.
Depois que a política concluir a execução, você será redirecionado para https://jwt.ms
e verá um token JWT decodificado. Ele se parece com o seguinte trecho do token JWT:
{
"typ": "JWT",
"alg": "RS256",
"kid": "pxLOMWFg...."
}.{
...
"sub": "abcd-1234-efgh-5678-ijkl-etc.",
...
"acr": "b2c_1a_contosocustompolicy",
...
"message": "Hello World!"
}.[Signature]
Observe as declarações message
e sub
, que definimos como declarações de saída na seção RelyingParty
.
Próximas etapas
Neste artigo, você aprendeu e usou quatro seções incluídas em uma política personalizada do Azure AD B2C. Essas seções são adicionadas como elementos filho ao elemento raiz TrustFrameworkPolicy
:
- BuildingBlocks
- ClaimsProviders
- UserJourneys
- RelyingParty
Em seguida, aprenda:
Como coletar e usar entradas de usuário usando uma política personalizada.
Sobre a visão geral das declarações de uma política personalizada.
Sobre o tipo de dados de declarações de uma política personalizada.
Sobre os tipos de entrada de usuário de uma política personalizada.