Configurar o fluxo de credenciais do cliente OAuth 2.0 no Azure Ative Directory B2C

Antes de começar, use o seletor Escolha um tipo de política para escolher o tipo de política que você está configurando. O Azure Ative Directory B2C oferece dois métodos para definir como os usuários interagem com seus aplicativos: por meio de fluxos de usuário predefinidos ou por meio de políticas personalizadas totalmente configuráveis. As etapas exigidas neste artigo são diferentes para cada método.

O fluxo de concessão de credenciais do cliente OAuth 2.0 permite que um aplicativo (cliente confidencial) use suas próprias credenciais, em vez de representar um usuário, para autenticar ao chamar um recurso da Web, como a API REST. Este tipo de concessão é comumente utilizado para interações de servidor para servidor que têm de ser executadas em segundo plano, sem interação imediata com um utilizador. Estes tipos de aplicações são frequentemente denominados daemons ou conta de serviço.

No fluxo de credenciais do cliente, as permissões são concedidas diretamente ao próprio aplicativo por um administrador. Quando o aplicativo apresenta um token a um recurso, o recurso impõe que o próprio aplicativo tenha autorização para executar uma ação, já que não há nenhum usuário envolvido na autenticação. Este artigo aborda as etapas necessárias para autorizar um aplicativo a chamar uma API e como obter os tokens necessários para chamar essa API.

Este recurso está em pré-visualização pública.

Visão geral do registro do aplicativo

Para permitir que seu aplicativo entre com credenciais de cliente e, em seguida, chame uma API Web, registre dois aplicativos no diretório B2C do Azure AD.

  • O registro do aplicativo permite que seu aplicativo entre com o Azure AD B2C. O processo de registro do aplicativo gera uma ID do aplicativo, também conhecida como ID do cliente, que identifica exclusivamente seu aplicativo. Você também cria um segredo do cliente, que seu aplicativo usa para adquirir os tokens com segurança.

  • O registro da API da Web permite que seu aplicativo chame uma API da Web segura. O registro inclui os escopos da API da Web. Os escopos fornecem uma maneira de gerenciar permissões para recursos protegidos, como sua API da Web. Em seguida, você concede permissões ao aplicativo para os escopos da API da Web. Quando um token de acesso é solicitado, seu aplicativo especifica o .default parâmetro de escopo da solicitação. O Azure AD B2C retorna os escopos da API Web concedidos ao seu aplicativo.

A arquitetura e os registros do aplicativo são ilustrados no diagrama a seguir:

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

Etapa 1: Registrar o aplicativo de API da Web

Nesta etapa, você registra a API da Web (App 2) com seus escopos. Mais tarde, você concede sua permissão de aplicativo (Aplicativo 1) para esses escopos. Se você já tiver esse registro de aplicativo, ignore esta etapa e passe para a próxima, Etapa 1.1 Definir funções (escopos) da API da Web.

Para criar o registro do aplicativo de API da Web (ID do aplicativo: 2), siga estas etapas:

  1. Inicie sessão no portal do Azure.

  2. Verifique se você está usando o diretório que contém seu locatário do Azure AD B2C. Selecione o ícone Diretórios + assinaturas na barra de ferramentas do portal.

  3. Nas configurações do Portal | Página Diretórios + assinaturas , localize seu diretório do Azure AD B2C na lista Nome do diretório e selecione Alternar.

  4. No portal do Azure, procure e selecione Azure AD B2C.

  5. Selecione Registos de aplicações e, em seguida, selecione Novo registo.

  6. Em Name, insira um nome para o aplicativo (por exemplo, my-api1). Deixe os valores padrão para URI de redirecionamento e tipos de conta suportados.

  7. Selecione Registar.

  8. Depois que o registro do aplicativo for concluído, selecione Visão geral.

  9. Registre o valor da ID do aplicativo (cliente) para uso posterior ao configurar o aplicativo Web.

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

Etapa 1.1 Definir funções de API da Web (escopos)

Nesta etapa, você configura o URI de ID do Aplicativo da API da Web e, em seguida, define as funções do Aplicativo. As funções do aplicativo, usadas pelos escopos do OAuth 2.0 e definidas em um registro de aplicativo que representa sua API. Seu aplicativo usa o URI da ID do aplicativo com o .default escopo. Para definir funções de aplicativo, siga estas etapas:

  1. Selecione a API da Web que você criou, por exemplo , my-api1.

  2. Em Gerenciar, selecione Expor uma API.

  3. Ao lado de URI da ID do aplicativo, selecione o link Definir. Substitua o valor padrão (GUID) por um nome exclusivo (por exemplo, api) e selecione Salvar.

  4. Copie o URI da ID do aplicativo. A captura de tela a seguir mostra como copiar o URI da ID do aplicativo.

    Screenshot shows how to copy the application I D.

  5. Em Gerenciar, selecione Manifesto para abrir o editor de manifesto do aplicativo. No editor, localize a configuração e defina as appRoles funções do aplicativo destinadas applicationsao . Cada definição de função de aplicativo deve ter um identificador exclusivo global (GUID) para seu id valor. Gere um novo GUID executando new-guido comando no Microsoft PowerShell ou um gerador de GUID online. A value propriedade de cada definição de função de aplicativo aparece no escopo, a scp declaração. A value propriedade não pode conter espaços. O exemplo a seguir demonstra duas funções de aplicativo, leitura e gravação:

    "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. Na parte superior da página, selecione Salvar para salvar as alterações de manifesto.

Passo 2: Registar uma candidatura

Para permitir que seu aplicativo entre com o Azure AD B2C usando o fluxo de credenciais do cliente, você pode usar um aplicativo existente ou registrar um novo (Aplicativo 1).

Se estiver a utilizar uma aplicação existente, certifique-se de accessTokenAcceptedVersion que a aplicação está definida como 2:

  1. No portal do Azure, procure e selecione Azure AD B2C.
  2. Selecione Registos de aplicações e, em seguida, selecione a sua aplicação existente na lista.
  3. No menu à esquerda, em Gerenciar, selecione Manifesto para abrir o editor de manifesto.
  4. Localize o accessTokenAcceptedVersion elemento e defina seu valor como 2.
  5. Na parte superior da página, selecione Salvar para salvar as alterações.

Para criar um novo registo de aplicação Web, siga estes passos:

  1. No portal do Azure, procure e selecione Azure AD B2C

  2. Selecione Registos de aplicações e, em seguida, selecione Novo registo.

  3. Insira um Nome para o aplicativo. Por exemplo, ClientCredentials_app.

  4. Deixe os outros valores como estão e selecione Registrar.

  5. Registre o ID do aplicativo (cliente) para uso em uma etapa posterior.

    Screenshot shows how to get the application I D.

Etapa 2.1 Criar um segredo do cliente

Crie um segredo de cliente para o aplicativo registrado. Seu aplicativo usa o segredo do cliente para provar sua identidade quando solicita tokens.

  1. Em Gerenciar, selecione Segredos de certificados&.

  2. Selecione Novo segredo do cliente.

  3. Na caixa Descrição, insira uma descrição para o segredo do cliente (por exemplo, clientsecret1).

  4. Em Expira, selecione uma duração para a qual o segredo é válido e, em seguida, selecione Adicionar.

  5. Registre o valor do segredo. Use esse valor para configuração em uma etapa posterior.

    Screenshot shows how to copy the application secret.

Etapa 2.2 Conceder permissões ao aplicativo para a API da Web

Para conceder permissões à sua aplicação (Aplicação 1), siga estes passos:

  1. Selecione Registos de aplicações e, em seguida, selecione a aplicação que criou (Aplicação 1).

  2. Em Gerenciar, selecione Permissões de API.

  3. Em Permissões configuradas, selecione Adicionar uma permissão.

  4. Selecione a guia Minhas APIs .

  5. Selecione a API (App 2) à qual o aplicativo Web deve ter acesso. Por exemplo, digite my-api1.

  6. Selecione Permissão do aplicativo.

  7. Em Permissão, expanda aplicativo e selecione os escopos definidos anteriormente (por exemplo, app.read e app.write).

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

  8. Selecione Adicionar permissões.

  9. Selecione Conceder consentimento de administrador para <o nome> do seu inquilino.

  10. Selecione Yes (Sim).

  11. Selecione Atualizar e verifique se Concedido para ... aparece em Status para ambos os escopos.

Etapa 3: Obter um token de acesso

Não há ações específicas para habilitar as credenciais do cliente para fluxos de usuário ou políticas personalizadas. Os fluxos de usuário do Azure AD B2C e as políticas personalizadas dão suporte ao fluxo de credenciais do cliente. Se ainda não tiver feito isso, crie um fluxo de usuário ou uma política personalizada. Em seguida, use seu aplicativo favorito de desenvolvimento de API para gerar uma solicitação de autorização. Construa uma chamada como este exemplo com as seguintes informações como o corpo da solicitação POST:

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

  • Substitua <tenant-name> pelo nome do seu locatário do Azure AD B2C. Por exemplo, contoso.b2clogin.com.
  • Substitua <policy> pelo nome completo do seu fluxo de usuário ou política personalizada. Observe que todos os tipos de fluxos de usuário e políticas personalizadas oferecem suporte ao fluxo de credenciais do cliente. Você pode usar qualquer fluxo de usuário ou política personalizada que tiver ou criar uma nova, como inscrição ou entrada.
Key valor
grant_type client_credentials
client_id A ID do Cliente da Etapa 2: Registrar um aplicativo.
client_secret O valor do segredo do cliente da Etapa 2.1 Criar um segredo do cliente.
âmbito O URI da ID do Aplicativo da Etapa 1.1 Definir funções da API da Web (escopos) e .default. Por exemplo https://contoso.onmicrosoft.com/api/.default, ou https://contoso.onmicrosoft.com/12345678-0000-0000-0000-000000000000/.default.

A solicitação POST real se parece com o exemplo a seguir:

Pedido:

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

Resposta:

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

Saiba mais sobre as declarações de token de acesso de retorno. A tabela a seguir lista as declarações relacionadas ao fluxo de credenciais do cliente.

Afirmação Description Valor
aud Identifica o destinatário pretendido do token. A ID do cliente da API.
sub A entidade de serviço associa-se ao aplicativo que iniciou a solicitação. É o principal de serviço do client_id pedido de autorização.
azp Parte autorizada - a parte para a qual o token de acesso foi emitido. A ID do cliente do aplicativo que iniciou a solicitação. É o mesmo valor especificado no client_id da solicitação de autorização.
scp O conjunto de escopos expostos pela API do aplicativo (delimitador de espaço). No fluxo de credenciais do cliente, a solicitação de autorização solicita o escopo, enquanto o .default token contém a lista de escopos expostos (e consentidos pelo administrador do aplicativo) pela API. Por exemplo, app.read app.write.

Etapa 3.1 Obter um token de acesso com script

Use o seguinte script do PowerShell para testar sua configuração:

$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

Use o seguinte script cURL para testar sua configuração:

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

Etapa 4: Personalizar o token

Este recurso está disponível apenas para políticas personalizadas. Para as etapas de configuração, selecione Política personalizada no seletor anterior.

As políticas personalizadas fornecem uma maneira de estender o processo de emissão de tokens. Para personalizar a jornada do usuário das credenciais do cliente OAuth 2.0, siga as orientações sobre como configurar uma jornada do usuário de credenciais do cliente. Em seguida, no JwtIssuer perfil técnico, adicione os ClientCredentialsUserJourneyId metadados com uma referência à jornada do usuário que você criou.

O exemplo a seguir mostra como adicionar o ClientCredentialsUserJourneyId ao perfil técnico do emissor do token.

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

O exemplo a seguir mostra uma jornada de usuário de credenciais de cliente. São necessários o primeiro e o último passo de orquestração.

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

Próximos passos

Saiba como configurar um fluxo de credenciais de senha do proprietário do recurso no Azure AD B2C