Partilhar via


Escreva sua primeira política personalizada do Azure Ative Directory B2C - Hello World!

Em seu aplicativo, você pode usar fluxos de usuário que permitem que os usuários se inscrevam, entrem ou gerenciem seus perfis. Quando os fluxos de usuários não cobrem todas as necessidades específicas da sua empresa, 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

Nota

Este artigo faz parte da série de guias de instruções Criar e executar suas próprias políticas personalizadas no Azure Ative Directory B2C. Recomendamos que comece esta série desde o primeiro artigo.

Etapa 1 - Configurar as chaves de assinatura e criptografia

Se ainda não o fez, crie as seguintes chaves de encriptação. Para automatizar o passo a passo abaixo, visite o aplicativo de configuraçã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 arquivo, 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 seu inquilino.

    Os elementos XML definem o elemento de nível TrustFrameworkPolicy superior de um arquivo de política com sua ID de política e nome de 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 reivindicação é como uma variável. A declaração da reivindicação também mostra o tipo de dados da reivindicaçã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 de Token JWT. CryptographicKeys Na seção , se você usou nomes diferentes para configurar as chaves de assinatura e criptografia na etapa 1, certifique-se de usar o valor correto para o 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>
    

    Adicionámos um UserJourney. A jornada 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. Essa jornada 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 é o ponto de entrada para sua política. Ele especifica o UserJourney a ser executado e as declarações a serem incluídas no token que é retornado quando a política é executada.

Depois de concluir a etapa 2, o arquivo deve ser semelhante ao código a ContosoCustomPolicy.XML seguir:

    <?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. Inicie sessão 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 seu locatário do Azure AD B2C no menu Diretórios + assinaturas .
  3. No portal do Azure, procure e selecione Azure AD B2C.
  4. No menu à esquerda, em Políticas, selecione Identity Experience Framework.
  5. Selecione Carregar política personalizada, procure selecionar e, em seguida, carregue o ContosoCustomPolicy.XML arquivo.

Depois de carregar o ficheiro, o Azure AD B2C adiciona o prefixo B2C_1A_, para que os nomes sejam semelhantes aos B2C_1A_CONTOSOCUSTOMPOLICY.

Etapa 4 - Testar a política personalizada

  1. Em Políticas personalizadas, selecione B2C_1A_CONTOSOCUSTOMPOLICY.
  2. Para Selecionar aplicativo na página de visão geral da política personalizada, selecione o aplicativo Web, como webapp1 , que você registrou anteriormente. Certifique-se de que o valor Select reply URL está definido comohttps://jwt.ms.
  3. Selecione o botão Executar agora .

Depois que a política terminar a execução, você será redirecionado para https://jwt.mso , e verá um token JWT decodificado. Ele é semelhante ao seguinte trecho 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 as message declarações e sub , que definimos como declarações de RelyingParty saída na seção.

Próximos passos

Neste artigo, você aprendeu e usou quatro seções incluídas em uma política personalizada do Azure AD B2C. Estas seções são adicionadas como elementos filho o TrustFrameworkPolicy elemento raiz:

  • BuildingBlocks
  • ClaimsProviders
  • UserJourneys
  • RelyingParty

A seguir, aprenda: