Condividi tramite


Scrivere i primi criteri personalizzati di Azure Active Directory B2C - Hello World!

Nell'applicazione è possibile usare i flussi utente che consentono agli utenti di iscriversi, accedere o gestire il proprio profilo. Quando i flussi utente non coprono tutte le esigenze aziendali specifiche, è possibile usare criteri personalizzati.

Anche se è possibile usare il pacchetto di avvio dei criteri personalizzati predefinito per scrivere criteri personalizzati, è importante comprendere come viene compilato un criterio personalizzato. Questo articolo illustra come creare il primo criterio personalizzato da zero.

Prerequisiti

Nota

Questo articolo fa parte della serie di procedure Creare ed eseguire criteri personalizzati in Azure Active Directory B2C. È consigliabile iniziare questa serie dal primo articolo.

Passaggio 1: Configurare le chiavi di firma e crittografia

Se non è già stato fatto, creare le chiavi di crittografia seguenti. Per automatizzare la procedura dettagliata seguente, visitare l'app di installazione di IEF e seguire le istruzioni:

  1. Usare la procedura descritta in Aggiungere chiavi di firma e crittografia per le applicazioni Identity Experience Framework per creare la chiave di firma.

  2. Usare la procedura descritta in Aggiungere chiavi di firma e crittografia per le applicazioni Identity Experience Framework per creare la chiave di crittografia.

Passaggio 2: Compilare il file di criteri personalizzato

  1. In VS Code creare e aprire il file ContosoCustomPolicy.XML.

  2. Nel file ContosoCustomPolicy.XML aggiungere il codice seguente:

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

    Sostituire yourtenant con la parte del sottodominio del nome del tenant, ad esempio contoso. Informazioni su come ottenere il nome del tenant.

    Gli elementi XML definiscono l'elemento di primo livello TrustFrameworkPolicy di un file di criteri con l'ID criterio e il nome del tenant. L'elemento TrustFrameworkPolicy contiene altri elementi XML che verranno usati in questa serie.

  3. Per dichiarare un'attestazione, aggiungere il codice seguente nella BuildingBlocks sezione del ContosoCustomPolicy.XML file:

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

    Un'attestazione è simile a una variabile. La dichiarazione dell'attestazione mostra anche il tipo di dati dell'attestazione.

  4. ClaimsProviders Nella sezione del ContosoCustomPolicy.XML file aggiungere il codice seguente:

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

    È stata dichiarata un'autorità emittente di token JWT. CryptographicKeys Nella sezione, se sono stati usati nomi diversi per configurare le chiavi di firma e crittografia nel passaggio 1, assicurarsi di usare il valore corretto per .StorageReferenceId

  5. UserJourneys Nella sezione del ContosoCustomPolicy.XML file aggiungere il codice seguente:

      <UserJourney Id="HelloWorldJourney">
        <OrchestrationSteps>
          <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
        </OrchestrationSteps>
      </UserJourney>
    

    È stato aggiunto un UserJourney. Il percorso utente specifica la logica di business che l'utente finale passa durante l'elaborazione di una richiesta da parte di Azure AD B2C. Questo percorso utente ha un solo passaggio che rilascia un token JTW con le attestazioni che verranno definite nel passaggio successivo.

  6. RelyingParty Nella sezione del ContosoCustomPolicy.XML file aggiungere il codice seguente:

      <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 sezione RelyingParty è il punto di ingresso del criterio. Specifica l'oggetto UserJourney da eseguire e le attestazioni da includere nel token restituito durante l'esecuzione dei criteri.

Al termine del passaggio 2, il ContosoCustomPolicy.XML file dovrebbe essere simile al codice seguente:

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

Passaggio 3 - Caricare un file di criteri personalizzato

  1. Accedi al portale di Azure.
  2. Se si ha accesso a più tenant, selezionare l'icona Impostazioni nel menu in alto per passare al tenant di Azure AD B2C dal menu Directory e sottoscrizioni.
  3. Nel portale di Azure cercare e selezionare Azure AD B2C.
  4. Nel menu a sinistra, in Criteri, selezionare Framework esperienza di gestione delle identità.
  5. Selezionare Carica criteri personalizzati, selezionare e quindi caricare il ContosoCustomPolicy.XML file.

Dopo aver caricato il file, Azure AD B2C aggiunge il prefisso B2C_1A_, in modo che i nomi risultino simili a B2C_1A_CONTOSOCUSTOMPOLICY.

Passaggio 4- Testare i criteri personalizzati

  1. In Criteri personalizzati selezionare B2C_1A_CONTOSOCUSTOMPOLICY.
  2. Per Selezionare l'applicazione nella pagina di panoramica dei criteri personalizzati, selezionare l'applicazione Web, ad esempio webapp1 registrata in precedenza. Assicurarsi che il valore Select reply URL (Seleziona URL di risposta) sia impostato suhttps://jwt.ms .
  3. Selezionare Il pulsante Esegui adesso .

Al termine dell'esecuzione del criterio, si viene reindirizzati a https://jwt.mse viene visualizzato un token JWT decodificato. È simile al frammento di token JWT seguente:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "abcd-1234-efgh-5678-ijkl-etc.",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "message": "Hello World!"
    }.[Signature]

Si notino le message attestazioni e sub impostate come attestazioni di output nella RelyingParty sezione .

Passaggi successivi

In questo articolo sono state apprese e usate quattro sezioni incluse in un criterio personalizzato di Azure AD B2C. Queste sezioni vengono aggiunte come elementi figlio dell'elemento TrustFrameworkPolicy radice:

  • BuildingBlocks
  • ClaimsProviders
  • UserJourneys
  • RelyingParty

A questo punto, vedere: