Llamadas entre servicios mediante las credenciales del cliente (secreto compartido o certificado)

Advertencia

Este contenido es el punto de conexión anterior de Azure AD v1.0. Use la Plataforma de identidad de Microsoft.

El flujo de concesión de credenciales de cliente de OAuth 2.0 permite a un servicio web (cliente confidencial) usar sus propias credenciales para autenticarse al llamar a otro servicio web, en lugar de suplantar a un usuario. En este escenario, el cliente es normalmente un servicio web de nivel intermedio, un servicio demonio o un sitio web. Para conseguir un mayor nivel de control, Azure AD también permite al servicio que realiza la llamada usar un certificado (en lugar de un secreto compartido) como credencial.

Diagrama de flujo de concesión de credenciales de cliente

El diagrama siguiente explica cómo funciona el flujo de concesión de credenciales de cliente en Azure Active Directory (Azure AD).

Flujo de concesión de credenciales de cliente de OAuth2.0

  1. La aplicación cliente se autentica en el punto de conexión de emisión de tokens de Azure AD y solicita un token de acceso.
  2. El punto de conexión de emisión de tokens de Azure AD emite el token de acceso.
  3. El token de acceso se utiliza para autenticar los recursos protegidos.
  4. Los datos de los recursos protegidos se devuelven a la aplicación cliente.

Registro de los servicios en Azure AD

Registre el servicio de llamada y el servicio de recepción en Azure Active Directory (Azure AD). Para obtener más información, consulte Integración de aplicaciones con Azure Active Directory.

Solicitar un token de acceso

Para solicitar un token de acceso, utilice una solicitud HTTP POST al punto de conexión específico del inquilino de Azure AD.

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

Solicitud de token de acceso entre servicios

Se pueden dar dos casos en función de si la aplicación cliente elige un secreto compartido o un certificado para su protección.

Primer caso: solicitud de token de acceso con un secreto compartido

Cuando se utiliza un secreto compartido, una solicitud de token de acceso entre servicios contiene los parámetros siguientes:

Parámetro Tipo Descripción
grant_type requerido Especifica el tipo de concesión solicitado. En un flujo de concesión de credenciales de cliente, el valor debe ser client_credentials.
client_id requerido Especifica el identificador de cliente de Azure AD del servicio web que realiza la llamada. Para buscar el identificador del cliente de la aplicación que realiza la llamada, en Azure Portal, haga clic en Azure Active Directory y Registros de aplicaciones, y haga clic en la aplicación. El identificador client_id es el identificador de aplicación
client_secret requerido Escriba una clave registrada para el servicio web de llamada o la aplicación de demonio de Azure AD. Para crear una clave, en Azure Portal, haga clic en Azure Active Directory y en Registros de aplicaciones, haga clic en la aplicación, en Configuración y en Claves y agregue una clave. Cuando lo proporcione, codifique como dirección URL este secreto.
resource requerido Escriba el URI del identificador de la aplicación del servicio web de recepción. Para buscar el URI del identificador de la aplicación, en Azure Portal, haga clic en Azure Active Directory y en Registros de aplicaciones, haga clic en la aplicación de servicio y, a continuación, en Configuración y en Propiedades.

Ejemplo

El siguiente elemento HTTP POST solicita un token de acceso para el servicio web https://service.contoso.com/. El parámetro client_id permite identificar el servicio web que solicita el token de acceso.

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: solicitud de token de acceso con un certificado

Una solicitud de token de acceso entre servicios con un certificado contiene los parámetros siguientes:

Parámetro Tipo Descripción
grant_type requerido Especifica el tipo de respuesta solicitado. En un flujo de concesión de credenciales de cliente, el valor debe ser client_credentials.
client_id requerido Especifica el identificador de cliente de Azure AD del servicio web que realiza la llamada. Para buscar el identificador del cliente de la aplicación que realiza la llamada, en Azure Portal, haga clic en Azure Active Directory y Registros de aplicaciones, y haga clic en la aplicación. El identificador client_id es el identificador de aplicación
client_assertion_type requerido El valor debe ser urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion requerido Aserción (un JSON Web Token) que debe crear y firmar con el certificado que ha registrado como credenciales de la aplicación. Lea el artículo sobre las credenciales de certificado para información sobre cómo registrar el certificado y el formato de la aserción.
resource requerido Escriba el URI del identificador de la aplicación del servicio web de recepción. Para buscar el URI del identificador de la aplicación, en Azure Portal, haga clic en Azure Active Directory y en Registros de aplicaciones, haga clic en la aplicación de servicio y, a continuación, en Configuración y en Propiedades.

Tenga en cuenta que los parámetros son casi iguales que en el caso de solicitud con un secreto compartido, salvo que el parámetro client_secret se sustituye por dos parámetros: client_assertion_type y client_assertion.

Ejemplo

El siguiente elemento HTTP POST solicita un token de acceso para el servicio web https://service.contoso.com/ con un certificado. El parámetro client_id permite identificar el servicio web que solicita el token de acceso.

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

Respuesta de token de acceso entre servicios

Una respuesta correcta contiene una respuesta de OAuth 2.0 de JSON con los siguientes parámetros:

Parámetro Descripción
access_token El token de acceso solicitado. El servicio web de llamada puede usar este token para autenticarse en el servicio web de recepción.
token_type Indica el valor de tipo de token. El único tipo que admite Azure AD es el portador. Para más información sobre los tokens de portador, consulte OAuth2.0 Authorization Framework: Bearer Token Usage (RFC 6750) (Marco de autorización de OAuth2.0: uso del token de portador [RFC 6750]).
expires_in Durante cuánto tiempo es válido el token de acceso (en segundos).
expires_on La hora a la que expira el token de acceso. La fecha se representa como el número de segundos desde 1970-01-01T0:0:0Z UTC hasta la fecha de expiración. Este valor se utiliza para determinar la duración de los tokens almacenados en caché.
not_before La hora a partir de la cual el token de acceso pasa a ser utilizable. La fecha se representa como el número de segundos desde 1970-01-01T0:0:0Z UTC hasta la fecha de expiración del token.
resource El URI del identificador de la aplicación del servicio web de recepción.

Ejemplo de respuesta

En el ejemplo siguiente se muestra una respuesta correcta a una solicitud de un token de acceso a un servicio web.

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

Usar el token de acceso para obtener acceso al recurso protegido

El servicio puede usar el token de acceso adquirido para realizar solicitudes autenticadas a la API web de bajada mediante el establecimiento del token en el encabezado Authorization.

Ejemplo

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

Consulte también