Compartilhar via


Escreva sua primeira política personalizada do Azure Active Directory B2C – Olá, Mundo!

Importante

A partir de 1º de maio de 2025, o Azure AD B2C não estará mais disponível para compra para novos clientes. Saiba mais em nossas perguntas frequentes.

Em seu aplicativo, você pode usar fluxos de usuário que permitem que os usuários se inscrevam, entrem ou gerenciem seu perfil. Quando os fluxos de usuário não abrangem todas as suas necessidades específicas de negócios, você pode usar políticas personalizadas.

Embora você possa usar o pacote inicial de políticas personalizadas pré-criado para escrever políticas personalizadas, é importante entender como uma política personalizada é criada. Neste artigo, você aprenderá a criar sua primeira política personalizada do zero.

Pré-requisitos

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ê inicie esta série a partir do primeiro artigo.

Etapa 1 – Configurar as chaves de assinatura e criptografia

Se você ainda não fez isso, crie as seguintes chaves de criptografia. Para automatizar o passo a passo abaixo, visite o Aplicativo de Instalação do IEF e siga as instruções:

  1. Use as etapas em Adicionar chaves de assinatura e criptografia para aplicativos do Identity Experience Framework para criar a chave de assinatura.

  2. Use as etapas em Adicionar chaves de assinatura e criptografia para aplicativos do Identity Experience Framework para criar a chave de criptografia.

Etapa 2 – Criar o arquivo de política personalizado

  1. No VS Code, crie e abra o arquivo ContosoCustomPolicy.XML.

  2. ContosoCustomPolicy.XML No ficheiro, 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, como contoso. Saiba como obter o nome do locatário.

    Os elementos XML definem o elemento de nível TrustFrameworkPolicy superior de um arquivo de política com sua ID de política e o nome do locatário. O elemento TrustFrameworkPolicy contém outros elementos XML que você usará nesta série.

  3. Para declarar uma declaração, adicione o seguinte código na BuildingBlocks seção do ContosoCustomPolicy.XML arquivo:

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

  4. ClaimsProviders Na seção do ContosoCustomPolicy.XML arquivo, 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 JWT. Na seção CryptographicKeys, se você usou nomes diferentes para configurar as chaves de assinatura e criptografia na etapa 1, certifique-se de que está usando o valor correto para StorageReferenceId.

  5. UserJourneys Na seção do ContosoCustomPolicy.XML arquivo, 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 enquanto 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.

  6. RelyingParty Na seção do ContosoCustomPolicy.XML arquivo, 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 serve como ponto de entrada para sua 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 de concluir a etapa 2, o ContosoCustomPolicy.XML arquivo deverá ser semelhante ao 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 arquivo de política personalizado

  1. Entre no portal do Azure.
  2. Se você tiver acesso a vários locatários, selecione o ícone Configurações no menu superior para alternar para o seu locatário do Azure Active Directory B2C no menu Diretórios + assinaturas.
  3. No portal do Azure, pesquise e selecione Azure AD B2C.
  4. No menu à esquerda, em Políticas, selecione Identity Experience Framework.
  5. Escolha Carregar política personalizada, procure Selecionar e carregue o arquivo ContosoCustomPolicy.XML.

Depois de carregar o arquivo, o Azure AD B2C adiciona o prefixo B2C_1A_, de modo que os nomes são semelhantes a B2C_1A_CONTOSOCUSTOMPOLICY.

Etapa 4 – Testar a política personalizada

  1. Em Políticas personalizadas, selecione B2C_1A_CONTOSOCUSTOMPOLICY.
  2. Para selecionar o aplicativo na página de visão geral da política personalizada, selecione o aplicativo Web, como o webapp1 que você registrou anteriormente. Certifique-se de que o valor Selecionar URL de resposta esteja definidohttps://jwt.ms corretamente.
  3. 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 JWT decodificado. Parece semelhante ao seguinte trecho 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.

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 TrustFrameworkPolicy elemento raiz:

  • BuildingBlocks
  • ClaimsProviders
  • UserJourneys
  • Contando com o Partido

Em seguida, saiba: