Configurare il flusso delle credenziali client OAuth 2.0 in Azure Active Directory B2C

Prima di iniziare, usare il selettore Scegli un tipo di criterio per scegliere il tipo di criterio che si sta configurando. Azure Active Directory B2C offre due metodi per definire il modo in cui gli utenti interagiscono con le applicazioni: tramite flussi utente predefiniti o tramite criteri personalizzati completamente configurabili. I passaggi necessari in questo articolo sono diversi per ogni metodo.

Il flusso di concessione delle credenziali client OAuth 2.0 consente a un'app (client riservato) di usare le proprie credenziali, invece di rappresentare un utente, per eseguire l'autenticazione quando si chiama una risorsa Web, ad esempio l'API REST. Questo tipo di concessione viene comunemente usato per le interazioni da server a server che devono essere eseguite in background, senza l'interazione immediata con un utente. Questo tipo di applicazioni viene spesso definito daemon o account di servizio.

Nel flusso delle credenziali client, le autorizzazioni vengono concesse direttamente all'applicazione stessa da un amministratore. Quando l'app presenta un token a una risorsa, quest'ultima obbliga l'app stessa ad avere l'autorizzazione per eseguire un'azione, perché nessun utente è coinvolto nell'autenticazione. Questo articolo illustra i passaggi necessari per autorizzare un'applicazione a chiamare un'API e come ottenere i token necessari per chiamare tale API.

Questa funzionalità è disponibile in anteprima pubblica.

Panoramica della registrazione dell'app

Per consentire all'app di accedere con le credenziali client, quindi chiamare un'API Web, registrare due applicazioni nella directory di Azure AD B2C.

  • La registrazione dell'applicazione consente all'app di accedere con Azure AD B2C. Il processo di registrazione dell'app genera un ID applicazione, noto anche come ID client, che identifica in modo univoco l'app. Si crea anche un segreto client, che l'app usa per acquisire in modo sicuro i token.

  • La registrazione dell'API Web consente all'app di chiamare un'API Web sicura. La registrazione include gli ambiti dell'API Web. Gli ambiti consentono di gestire le autorizzazioni per le risorse protette, ad esempio l'API Web. Si concedono quindi le autorizzazioni dell'applicazione agli ambiti dell'API Web. Quando viene richiesto un token di accesso, l'app specifica il .default parametro di ambito della richiesta. Azure AD B2C restituisce gli ambiti dell'API Web concessi all'app.

L'architettura e le registrazioni dell'app sono illustrate nel diagramma seguente:

Diagram of a web app with web A P I call registrations and tokens.

Passaggio 1: Registrare l'app per le API Web

In questo passaggio si registra l'API Web (App 2) con i relativi ambiti. Successivamente, si concede l'autorizzazione dell'applicazione (App 1) a tali ambiti. Se si dispone già di una registrazione di tale app, ignorare questo passaggio, quindi passare a quello successivo, passaggio 1.1 Definire i ruoli api Web (ambiti).

Per creare la registrazione dell'app per le API Web (ID app: 2), seguire questa procedura:

  1. Accedi al portale di Azure.

  2. Assicurarsi di usare la directory che contiene il tenant di Azure AD B2C. Selezionare l'icona Directory e sottoscrizioni nella barra degli strumenti del portale.

  3. Nelle impostazioni del portale | Pagina Directory e sottoscrizioni , trovare la directory di Azure AD B2C nell'elenco Nome directory e quindi selezionare Cambia.

  4. Nel portale di Azure cercare e selezionare Azure AD B2C.

  5. Selezionare Registrazioni app e quindi Nuova registrazione.

  6. In Nome immettere un nome per l'applicazione, ad esempio my-api1. Lasciare i valori predefiniti per URI di reindirizzamento e Tipi di account supportati.

  7. Seleziona Registro.

  8. Al termine della registrazione dell'app, selezionare Panoramica.

  9. Registrare il valore ID applicazione (client) per usarlo in un secondo momento quando si configura l'applicazione Web.

    Screenshot that demonstrates how to get a web A P I application I D.

Passaggio 1.1 Definire i ruoli api Web (ambiti)

In questo passaggio si configura l'URI dell'ID applicazione api Web e quindi si definiscono i ruoli dell'app. I ruoli dell'app, usati dagli ambiti OAuth 2.0 e definiti in una registrazione dell'applicazione che rappresenta l'API. L'applicazione usa l'URI ID applicazione con l'ambito .default . Per definire i ruoli dell'app, seguire questa procedura:

  1. Selezionare l'API Web creata, ad esempio my-api1.

  2. In Gestisci selezionare Esponi un'API.

  3. Accanto a URI ID applicazione selezionare il collegamento Imposta. Sostituire il valore predefinito (GUID) con un nome univoco (ad esempio, api) e quindi selezionare Salva.

  4. Copiare l'URI ID applicazione. Lo screenshot seguente mostra come copiare l'URI ID applicazione.

    Screenshot shows how to copy the application I D.

  5. In Gestisci selezionare Manifesto per aprire l'editor del manifesto dell'applicazione. Nell'editor individuare l'impostazione appRoles e definire i ruoli dell'app destinati a applications. Ogni definizione di ruolo dell'app deve avere un identificatore univoco globale (GUID) per il relativo id valore. Generare un nuovo GUID eseguendo new-guidil comando in Microsoft PowerShell o un generatore GUID online. La value proprietà di ogni definizione di ruolo dell'app viene visualizzata nell'ambito, l'attestazione scp . La proprietà value non può contenere spazi. L'esempio seguente illustra due ruoli dell'app, lettura e scrittura:

    "appRoles": [
    {
      "allowedMemberTypes": ["Application"],
      "displayName": "Read",
      "id": "d6a15e20-f83c-4264-8e61-5082688e14c8",
      "isEnabled": true,
      "description": "Readers have the ability to read tasks.",
      "value": "app.read"
    },
    {
      "allowedMemberTypes": ["Application"],
      "displayName": "Write",
      "id": "204dc4ab-51e1-439f-8c7f-31a1ebf3c7b9",
      "isEnabled": true,
      "description": "Writers have the ability to create tasks.",
      "value": "app.write"
    }],
    
  6. Nella parte superiore della pagina selezionare Salva per salvare le modifiche del manifesto.

Passaggio 2: Registrare un'applicazione

Per abilitare l'accesso dell'app con Azure AD B2C usando il flusso delle credenziali client, è possibile usare un'applicazione esistente o registrare una nuova applicazione (App 1).

Se usi un'app esistente, assicurati che l'app accessTokenAcceptedVersion sia impostata su 2:

  1. Nel portale di Azure cercare e selezionare Azure AD B2C.
  2. Selezionare Registrazioni app e quindi selezionare l'app esistente nell'elenco.
  3. Nel menu a sinistra, in Gestisci, selezionare Manifesto per aprire l'editor del manifesto.
  4. Individuare l'elemento e impostarne il accessTokenAcceptedVersion valore su 2.
  5. Nella parte superiore della pagina selezionare Salva per salvare le modifiche.

Per creare una nuova registrazione dell'app Web, seguire questa procedura:

  1. Nella portale di Azure cercare e selezionare Azure AD B2C

  2. Selezionare Registrazioni app e quindi Nuova registrazione.

  3. Immettere un nome per l'applicazione. Ad esempio, ClientCredentials_app.

  4. Lasciare gli altri valori così come sono e quindi selezionare Registra.

  5. Prendere nota del valore di ID applicazione (client), che sarà necessario in un passaggio successivo.

    Screenshot shows how to get the application I D.

Passaggio 2.1 Creare un segreto client

Creare un segreto client per l'applicazione registrata. L'app usa il segreto client per dimostrare la propria identità quando richiede token.

  1. In Gestisci selezionare Certificati e segreti.

  2. Selezionare Nuovo segreto client.

  3. Nella casella Descrizione immettere una descrizione per il segreto client, ad esempio clientsecret1.

  4. In Scadenzaselezionare una durata per la quale il segreto è valido, quindi selezionare Aggiungi.

  5. Registrare il Valore del segreto. Usare questo valore per la configurazione in un passaggio successivo.

    Screenshot shows how to copy the application secret.

Passaggio 2.2 Concedere le autorizzazioni dell'app per l'API Web

Per concedere all'app (App 1) le autorizzazioni, seguire questa procedura:

  1. Selezionare Registrazioni app e quindi selezionare l'app creata (App 1).

  2. In Gestisci selezionare Autorizzazioni API.

  3. In Autorizzazioni configurate selezionare Aggiungi un'autorizzazione.

  4. Selezionare la scheda Le mie API.

  5. Selezionare l'API (App 2) a cui concedere l'accesso all'applicazione Web. Ad esempio, immettere my-api1.

  6. Selezionare Autorizzazione applicazione.

  7. In Autorizzazione espandere l'app e quindi selezionare gli ambiti definiti in precedenza, ad esempio app.read e app.write.

    Screenshot shows how to grant the application A P I permissions.

  8. Selezionare Aggiungi autorizzazioni.

  9. Selezionare Concedi consenso amministratore per <il nome> del tenant.

  10. Selezionare .

  11. Selezionare Aggiorna e quindi verificare che Concesso per ... sia visualizzato in Stato per entrambi gli ambiti.

Passaggio 3: Ottenere un token di accesso

Non esistono azioni specifiche per abilitare le credenziali client per i flussi utente o i criteri personalizzati. Sia i flussi utente di Azure AD B2C che i criteri personalizzati supportano il flusso delle credenziali client. Se non è già stato fatto, creare un flusso utente o un criterio personalizzato. Usare quindi l'applicazione di sviluppo api preferita per generare una richiesta di autorizzazione. Costruire una chiamata come nell'esempio con le informazioni seguenti come corpo della richiesta POST:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token

  • Sostituire <tenant-name> con il nome del tenant di Azure AD B2C. Ad esempio, contoso.b2clogin.com.
  • Sostituire <policy> con il nome completo del flusso utente o con i criteri personalizzati. Si noti che tutti i tipi di flussi utente e i criteri personalizzati supportano il flusso delle credenziali client. È possibile usare qualsiasi flusso utente o criterio personalizzato o crearne uno nuovo, ad esempio l'iscrizione o l'accesso.
Chiave valore
grant_type client_credentials
client_id ID client del passaggio 2 Registrare un'applicazione.
client_secret Valore del segreto client del passaggio 2.1 Creare un segreto client.
ambito URI ID applicazione del passaggio 1.1 Definire i ruoli dell'API Web (ambiti) e .default. Può essere ad esempio https://contoso.onmicrosoft.com/api/.default o https://contoso.onmicrosoft.com/12345678-0000-0000-0000-000000000000/.default.

La richiesta POST effettiva è simile all'esempio seguente:

Richiesta:

POST /<tenant-name>.onmicrosoft.com/B2C_1A_SUSI/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=33333333-0000-0000-0000-000000000000
&client_secret=FyX7Q~DuPJ...
&scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2F.default

Risposta:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5OZDlnUkNWWUc2dUs...",
    "token_type": "Bearer",
    "not_before": 1645172292,
    "expires_in": 3600,
    "expires_on": 1645175892,
    "resource": "33333333-0000-0000-0000-000000000000"
}

Informazioni sulle attestazioni del token di accesso restituite. Nella tabella seguente sono elencate le attestazioni correlate al flusso delle credenziali client.

Attestazione Descrizione valore
aud Identifica il destinatario del token. ID client dell'API.
sub Entità servizio associata all'applicazione che ha avviato la richiesta. Si tratta dell'entità servizio della client_id richiesta di autorizzazione.
azp Entità autorizzata: l'entità a cui è stato rilasciato il token di accesso. ID client dell'applicazione che ha avviato la richiesta. È lo stesso valore specificato nella client_id richiesta di autorizzazione.
scp Set di ambiti esposti dall'API dell'applicazione (delimitatore di spazio). Nel flusso delle credenziali client, la richiesta di autorizzazione richiede l'ambito .default , mentre il token contiene l'elenco di ambiti esposti (e acconsentito dall'amministratore dell'app) dall'API. Ad esempio, app.read app.write.

Passaggio 3.1 Ottenere un token di accesso con script

Usare lo script di PowerShell seguente per testare la configurazione:

$appId = "<client ID>"
$secret = "<client secret>"
$endpoint = "https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token"
$scope = "<Your API id uri>/.default"
$body = "grant_type=client_credentials&scope=" + $scope + "&client_id=" + $appId + "&client_secret=" + $secret

$token = Invoke-RestMethod -Method Post -Uri $endpoint -Body $body

Usare lo script cURL seguente per testare la configurazione:

curl --location --request POST 'https://<your-tenant>.b2clogin.com/<your-tenant>.onmicrosoft.com/<policy>/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--form 'grant_type="client_credentials"' \
--form 'client_id="<client ID>"' \
--form 'client_secret="<client secret>"' \
--form 'scope="<Your API id uri>/.default"'

Passaggio 4: Personalizzare il token

Questa funzionalità è disponibile solo per i criteri personalizzati. Per i passaggi di installazione, selezionare Criteri personalizzati nel selettore precedente.

I criteri personalizzati consentono di estendere il processo di rilascio dei token. Per personalizzare il percorso utente delle credenziali client OAuth 2.0, seguire le indicazioni su come configurare un percorso utente delle credenziali client. Quindi, nel JwtIssuer profilo tecnico, aggiungere i ClientCredentialsUserJourneyId metadati con un riferimento al percorso utente creato.

L'esempio seguente illustra come aggiungere l'oggetto al profilo tecnico dell'autorità ClientCredentialsUserJourneyId di certificazione del token.

<TechnicalProfile Id="JwtIssuer">
  <Metadata>
    <Item Key="ClientCredentialsUserJourneyId">ClientCredentialsJourney</Item>
  </Metadata>
</TechnicalProfile>

L'esempio seguente mostra un percorso utente relativo alle credenziali client. Sono necessari i primi e gli ultimi passaggi di orchestrazione.

<UserJourneys>
  <UserJourney Id="ClientCredentialsJourney">
    <OrchestrationSteps>
      <!-- [Required] Do the client credentials -->
      <OrchestrationStep Order="1" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="ClientCredSetupExchange" TechnicalProfileReferenceId="ClientCredentials_Setup" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- [Optional] Call a REST API or claims transformation -->
      <OrchestrationStep Order="2" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="TokenAugmentation" TechnicalProfileReferenceId="TokenAugmentation" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- [Required] Issue the access token -->
      <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
    </OrchestrationSteps>
  </UserJourney>
</UserJourneys>

Passaggi successivi

Informazioni su come configurare un flusso di credenziali password del proprietario della risorsa in Azure AD B2C