Chamadas de serviço a serviço com credenciais de cliente (segredo ou certificado partilhado)

Aviso

Este conteúdo destina-se ao ponto final Azure AD v1.0 mais antigo. Utilize o plataforma de identidades da Microsoft para novos projetos.

O Fluxo de Concessão de Credenciais de Cliente OAuth 2.0 permite que um serviço Web (cliente confidencial) utilize as suas próprias credenciais em vez de representar um utilizador, para se autenticar ao chamar outro serviço Web. Neste cenário, o cliente é normalmente um serviço Web de camada média, um serviço daemon ou um web site. Para um nível mais elevado de garantia, Azure AD também permite que o serviço de chamadas utilize um certificado (em vez de um segredo partilhado) como uma credencial.

Diagrama de fluxo de concessão de credenciais de cliente

O diagrama seguinte explica como funciona o fluxo de concessão de credenciais de cliente no Azure Active Directory (Azure AD).

Fluxo de Concessão de Credenciais de Cliente OAuth2.0

  1. A aplicação cliente autentica-se no ponto final de emissão de tokens de Azure AD e pede um token de acesso.
  2. O ponto final de emissão de tokens de Azure AD emite o token de acesso.
  3. O token de acesso é utilizado para autenticar no recurso protegido.
  4. Os dados do recurso protegido são devolvidos à aplicação cliente.

Registar os Serviços no Azure AD

Registe o serviço de chamadas e o serviço de receção no Azure Active Directory (Azure AD). Para obter instruções detalhadas, veja Integrar aplicações com o Azure Active Directory.

Pedir um Token de Acesso

Para pedir um token de acesso, utilize um HTTP POST para o ponto final de Azure AD específico do inquilino.

https://login.microsoftonline.com/<tenant id>/oauth2/token

Pedido de token de acesso serviço a serviço

Existem dois casos, consoante a aplicação cliente opte por ser protegida por um segredo partilhado ou por um certificado.

Primeiro caso: pedido de token de acesso com um segredo partilhado

Ao utilizar um segredo partilhado, um pedido de token de acesso de serviço a serviço contém os seguintes parâmetros:

Parâmetro Tipo Description
grant_type obrigatório Especifica o tipo de concessão pedido. Num fluxo de Concessão de Credenciais de Cliente, o valor tem de ser client_credentials.
client_id obrigatório Especifica o ID de cliente Azure AD do serviço Web de chamadas. Para localizar o ID de cliente da aplicação de chamada, na portal do Azure, clique em Azure Active Directory, clique em Registos de aplicações, clique na aplicação. O client_id é o ID da Aplicação
client_secret obrigatório Introduza uma chave registada para o serviço Web de chamada ou aplicação daemon no Azure AD. Para criar uma chave, na portal do Azure, clique em Azure Active Directory, clique em Registos de aplicações, clique na aplicação, clique em Definições, clique em Chaves e adicione uma Chave. Codificar o URL deste segredo ao forneciá-lo.
recurso obrigatório Introduza o URI do ID da Aplicação do serviço Web de receção. Para localizar o URI do ID da Aplicação, no portal do Azure, clique em Azure Active Directory, clique em Registos de aplicações, clique na aplicação de serviço e, em seguida, clique em Definições e Propriedades.

Exemplo

O SEGUINTE HTTP POST pede um token de acesso para o https://service.contoso.com/ serviço Web. O client_id identifica o serviço Web que pede o token de acesso.

POST /contoso.com/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F

Segundo caso: pedido de token de acesso com um certificado

Um pedido de token de acesso serviço a serviço com um certificado contém os seguintes parâmetros:

Parâmetro Tipo Description
grant_type obrigatório Especifica o tipo de resposta pedido. Num fluxo de Concessão de Credenciais de Cliente, o valor tem de ser client_credentials.
client_id obrigatório Especifica o ID de cliente Azure AD do serviço Web de chamadas. Para localizar o ID de cliente da aplicação de chamada, na portal do Azure, clique em Azure Active Directory, clique em Registos de aplicações, clique na aplicação. O client_id é o ID da Aplicação
client_assertion_type obrigatório O valor tem de ser urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion obrigatório Uma afirmação (um Token Web JSON) que precisa de criar e assinar com o certificado que registou como credenciais para a sua aplicação. Leia sobre as credenciais de certificado para saber como registar o certificado e o formato da asserção.
recurso obrigatório Introduza o URI do ID da Aplicação do serviço Web de receção. Para localizar o URI do ID da Aplicação, no portal do Azure, clique em Azure Active Directory, clique em Registos de aplicações, clique na aplicação de serviço e, em seguida, clique em Definições e Propriedades.

Tenha em atenção que os parâmetros são quase os mesmos que no caso do pedido por segredo partilhado, exceto que o parâmetro client_secret é substituído por dois parâmetros: um client_assertion_type e client_assertion.

Exemplo

O SEGUINTE HTTP POST pede um token de acesso para o https://service.contoso.com/ serviço Web com um certificado. O client_id identifica o serviço Web que pede o token de acesso.

POST /<tenant_id>/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

resource=https%3A%2F%contoso.onmicrosoft.com%2Ffc7664b4-cdd6-43e1-9365-c2e1c4e1b3bf&client_id=97e0a5b7-d745-40b6-94fe-5f77d35c6e05&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg&grant_type=client_credentials

Resposta do Token de Acesso de Serviço a Serviço

Uma resposta com êxito contém uma resposta JSON OAuth 2.0 com os seguintes parâmetros:

Parâmetro Description
access_token O token de acesso pedido. O serviço Web de chamadas pode utilizar este token para autenticar no serviço Web de receção.
token_type Indica o valor do tipo de token. O único tipo que Azure AD suporta é o Portador. Para obter mais informações sobre tokens de portador, consulte OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
expires_in Durante quanto tempo o token de acesso é válido (em segundos).
expires_on A hora em que o token de acesso expira. A data é representada como o número de segundos entre 1970 e 01-01T0:0:0Z UTC até à hora de expiração. Este valor é utilizado para determinar a duração dos tokens em cache.
not_before O tempo a partir do qual o token de acesso se torna utilizável. A data é representada como o número de segundos entre 1970 e 01-01T0:0:0Z UTC até à hora de validade do token.
recurso O URI do ID da Aplicação do serviço Web de receção.

Exemplo de resposta

O exemplo seguinte mostra uma resposta bem-sucedida a um pedido de um token de acesso a um serviço Web.

{
"access_token":"eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw",
"token_type":"Bearer",
"expires_in":"3599",
"expires_on":"1388452167",
"resource":"https://service.contoso.com/"
}

Utilizar o token de acesso para aceder ao recurso seguro

O serviço pode utilizar o token de acesso adquirido para efetuar pedidos autenticados para a API Web a jusante ao definir o token no Authorization cabeçalho.

Exemplo

GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw

Veja também