Llamadas entre servicios que usan la identidad de usuarios delegada en el flujo de On-Behalf-OfService-to-service calls that use delegated user identity in the On-Behalf-Of flow

Se aplica a:Applies to:
  • El punto de conexión de Azure AD v1.0Azure AD v1.0 endpoint

El flujo de On-Behalf-Of (OBO) de OAuth 2.0 permite que una aplicación que invoca un servicio o una API web pase la autenticación de usuario a otro servicio o API web.The OAuth 2.0 On-Behalf-Of (OBO) flow enables an application that invokes a service or web API to pass user authentication to another service or web API. El flujo de OBO propaga la identidad y los permisos del usuario delegado a través de la cadena de solicitud.The OBO flow propagates the delegated user identity and permissions through the request chain. Para que el servicio de nivel intermedio realice solicitudes autenticadas al servicio de bajada, debe proteger un token de acceso de Azure Active Directory (Azure AD) en nombre del usuario.For the middle-tier service to make authenticated requests to the downstream service, it must secure an access token from Azure Active Directory (Azure AD) on behalf of the user.

Importante

Desde mayo de 2018, no se puede usar el parámetro id_token para el flujo de On-Behalf-Of.As of May 2018, an id_token can't be used for the On-Behalf-Of flow. Las aplicaciones de una sola página han de pasar un token de acceso a un cliente confidencial de nivel intermedio para ejecutar flujos de OBO.Single-page apps (SPAs) must pass an access token to a middle-tier confidential client to perform OBO flows. Para obtener más información acerca de los clientes que pueden realizar llamadas On-Behalf-Of, consulte las limitaciones.For more detail about the clients that can perform On-Behalf-Of calls, see limitations.

Diagrama del flujo de On-Behalf-OfOn-Behalf-Of flow diagram

El flujo de OBO se inicia una vez que el usuario se ha autenticado en una aplicación que usa el flujo de concesión del código de autorización de OAuth 2.0.The OBO flow starts after the user has been authenticated on an application that uses the OAuth 2.0 authorization code grant flow. En ese momento, la aplicación envía un token de acceso (token A) a la API web de nivel intermedio (API A) que contiene las solicitudes y consentimientos del usuario para acceder a la API A. A continuación, la API A realiza una solicitud autenticada a la API web de bajada (API B).At that point, the application sends an access token (token A) to the middle-tier web API (API A) containing the user’s claims and consent to access API A. Next, API A makes an authenticated request to the downstream web API (API B).

Estos pasos constituyen el flujo de On-Behalf-Of: Muestra los pasos del flujo con derechos delegados de OAuth 2.0These steps constitute the On-Behalf-Of flow: Shows the steps in the OAuth2.0 On-Behalf-Of flow

  1. La aplicación cliente realiza una solicitud a la API A con el token A.The client application makes a request to API A with the token A.
  2. La API A se autentica en el punto de conexión de emisión de tokens de Azure AD y solicita un token para obtener acceso a la API B.API A authenticates to the Azure AD token issuance endpoint and requests a token to access API B.
  3. El punto de conexión de emisión de tokens de Azure AD valida las credenciales de la API A con el token A y emite el token de acceso para la API B (token B).The Azure AD token issuance endpoint validates API A's credentials with token A and issues the access token for API B (token B).
  4. La solicitud a la API B contiene el token B en el encabezado de autorización.The request to API B contains token B in the authorization header.
  5. La API B devuelve los datos del recurso protegido.API B returns data from the secured resource.

Nota

La notificación de audiencia en un token de acceso que se usa para solicitar un token para un servicio de bajada debe ser el identificador del servicio que realiza la solicitud de OBO.The audience claim in an access token used to request a token for a downstream service must be the ID of the service making the OBO request. El token también debe estar firmado con la clave de firma global de Azure Active Directory (que es el valor predeterminado para las aplicaciones registradas a través de Registros de aplicaciones del portal).The token also must be signed with the Azure Active Directory global signing key (which is the default for applications registered via App registrations in the portal).

Registro de la aplicación y el servicio en Azure ADRegister the application and service in Azure AD

Registre el servicio de nivel intermedio y la aplicación cliente en Azure AD.Register both the middle-tier service and the client application in Azure AD.

Registro del servicio de nivel intermedioRegister the middle-tier service

  1. Inicie sesión en el Azure Portal.Sign in to the Azure portal.
  2. En la barra superior, seleccione su cuenta y, en la lista Directorio, seleccione un inquilino de Active Directory para la aplicación.On the top bar, select your account and look under the Directory list to select an Active Directory tenant for your application.
  3. Haga clic en Más servicios en el panel izquierdo y elija Azure Active Directory.Select More Services on the left pane and choose Azure Active Directory.
  4. Seleccione Registros de aplicaciones y, luego, Nuevo registro.Select App registrations and then New registration.
  5. Escriba un nombre descriptivo para la aplicación y seleccione el tipo de aplicación.Enter a friendly name for the application and select the application type.
  6. En Supported account types (Tipos de cuenta compatibles), seleccione Accounts in any organizational directory and personal Microsoft accounts (Cuentas en cualquier directorio de organización y cuentas personales de Microsoft).Under Supported account types, select Accounts in any organizational directory and personal Microsoft accounts.
  7. Establezca el URI de redireccionamiento en la URL base.Set the redirect URI to the base URL.
  8. Seleccione Registrar para crear la aplicación.Select Register to create the application.
  9. Genere un secreto de cliente antes de salir de Azure Portal.Generate a client secret before exiting the Azure portal.
  10. En Azure Portal, elija la aplicación y seleccione Certificados y secretos.In the Azure portal, choose your application and select Certificates & secrets.
  11. Seleccione Nuevo secreto de cliente y agregue un secreto con una duración de uno o dos años.Select New client secret and add a secret with a duration of either one year or two years.
  12. Al guardar esta página, Azure Portal muestra el valor del secreto.When you save this page, the Azure portal displays the secret value. Copie y guarde el valor del secreto en una ubicación segura.Copy and save the secret value in a safe location.

Importante

Necesitará el secreto para configurar las opciones de la aplicación en la implementación.You need the secret to configure the application settings in your implementation. Este valor de secreto no se volverá a mostrar y no se puede recuperar de ninguna otra manera.This secret value is not displayed again, and it isn't retrievable by any other means. Regístrelo en cuanto esté visible en Azure Portal.Record it as soon as it is visible in the Azure portal.

Registro del tipo de aplicación clienteRegister the client application

  1. Inicie sesión en el Azure Portal.Sign in to the Azure portal.
  2. En la barra superior, seleccione su cuenta y, en la lista Directorio, seleccione un inquilino de Active Directory para la aplicación.On the top bar, select your account and look under the Directory list to select an Active Directory tenant for your application.
  3. Haga clic en Más servicios en el panel izquierdo y elija Azure Active Directory.Select More Services on the left pane and choose Azure Active Directory.
  4. Seleccione Registros de aplicaciones y, luego, Nuevo registro.Select App registrations and then New registration.
  5. Escriba un nombre descriptivo para la aplicación y seleccione el tipo de aplicación.Enter a friendly name for the application and select the application type.
  6. En Supported account types (Tipos de cuenta compatibles), seleccione Accounts in any organizational directory and personal Microsoft accounts (Cuentas en cualquier directorio de organización y cuentas personales de Microsoft).Under Supported account types, select Accounts in any organizational directory and personal Microsoft accounts.
  7. Establezca el URI de redireccionamiento en la URL base.Set the redirect URI to the base URL.
  8. Seleccione Registrar para crear la aplicación.Select Register to create the application.
  9. Configure permisos para la aplicación.Configure permissions for your application. En Permisos de API, seleccione Agregar un permiso y, luego Mis API.In API permissions, select Add a permission and then My APIs.
  10. Escriba el nombre del servicio de nivel intermedio en el campo de texto.Type the name of the middle-tier service in the text field.
  11. Elija Seleccionar permisos y, después, seleccione Acceder a .Choose Select Permissions and then select Access .

Configuración de aplicaciones cliente conocidasConfigure known client applications

En este caso, el servicio de nivel intermedio debe obtener el consentimiento del usuario para obtener acceso a la API de bajada sin necesidad de interacción de un usuario.In this scenario, the middle-tier service needs to obtain the user's consent to access the downstream API without a user interaction. La opción para conceder acceso a la API de bajada debe presentarse inicialmente como parte del paso de autorización durante la autenticación.The option to grant access to the downstream API must be presented up front as part of the consent step during authentication.

Siga estos pasos para enlazar explícitamente el registro de la aplicación cliente de Azure AD con el registro del servicio de nivel intermedio.Follow the steps below to explicitly bind the client app's registration in Azure AD with the middle-tier service's registration. Esta operación combina el consentimiento requerido por el cliente y el nivel intermedio en un único cuadro de diálogo.This operation merges the consent required by both the client and middle-tier into a single dialog.

  1. Vaya al registro del servicio de nivel intermedio y haga clic en Manifiesto para abrir el editor de manifiestos.Go to the middle-tier service registration and select Manifest to open the manifest editor.
  2. Busque la propiedad de matriz knownClientApplications y agregue el identificador de cliente de la aplicación cliente como un elemento.Locate the knownClientApplications array property and add the client ID of the client application as an element.
  3. Seleccione Guardar para guardar el manifiesto.Save the manifest by selecting Save.

Solicitud de token de acceso entre serviciosService-to-service access token request

Para solicitar un token de acceso, realice una solicitud HTTP POST al punto de conexión específico del inquilino de Azure AD con los parámetros siguientes:To request an access token, make an HTTP POST to the tenant-specific Azure AD endpoint with the following parameters:

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

La aplicación cliente está protegida mediante un secreto compartido o un certificado.The client application is secured either by a shared secret or by a certificate.

Primer caso: solicitud de token de acceso con un secreto compartidoFirst case: Access token request with a shared secret

Cuando se utiliza un secreto compartido, una solicitud de token de acceso entre servicios contiene los parámetros siguientes:When using a shared secret, a service-to-service access token request contains the following parameters:

ParámetroParameter DESCRIPCIÓNDescription
grant_typegrant_type requeridorequired Tipo de la solicitud de token.The type of the token request. Una solicitud OBO usa JSON Web Token, por lo que el valor debe ser urn:ietf:params:oauth:grant-type:jwt-bearer.An OBO request uses a JSON Web Token (JWT) so the value must be urn:ietf:params:oauth:grant-type:jwt-bearer.
Aserciónassertion requeridorequired Valor del token de acceso usado en la solicitud.The value of the access token used in the request.
client_idclient_id requeridorequired Identificador de aplicación asignado al servicio de llamada durante el registro con Azure AD.The app ID assigned to the calling service during registration with Azure AD. Para buscar el identificador de la aplicación en Azure Portal, seleccione Active Directory, elija el directorio y, por último, seleccione el nombre de la aplicación.To find the app ID in the Azure portal, select Active Directory, choose the directory, and then select the application name.
client_secretclient_secret requeridorequired La clave registrada para el servicio de llamada de Azure AD.The key registered for the calling service in Azure AD. Este valor debe haberse anotado en el momento del registro.This value should have been noted at the time of registration.
resourceresource requeridorequired URI del identificador de la aplicación del servicio de recepción (recurso seguro).The app ID URI of the receiving service (secured resource). Para buscar el URI del identificador de la aplicación en Azure Portal, seleccione Active Directory y elija el directorio.To find the app ID URI in the Azure portal, select Active Directory and choose the directory. Seleccione el nombre de la aplicación, elija Todas las opciones y, después, seleccione Propiedades.Select the application name, choose All settings, and then select Properties.
requested_token_userequested_token_use requeridorequired Especifica cómo se debe procesar la solicitud.Specifies how the request should be processed. En el "flujo en nombre de", el valor debe ser on_behalf_of.In the On-Behalf-Of flow, the value must be on_behalf_of.
scopescope requeridorequired Lista de ámbitos separados por un espacio para la solicitud de token.A space separated list of scopes for the token request. Para OpenID Connect, el ámbito openid debe especificarse.For OpenID Connect, the scope openid must be specified.

EjemploExample

El siguiente elemento HTTP POST solicita un token de acceso para la API web https://graph.windows.net.The following HTTP POST requests an access token for the https://graph.windows.net web API. El parámetro client_id permite identificar el servicio que solicita el token de acceso.The client_id identifies the service that requests the access token.

// line breaks for legibility only

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

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_secret=0Y1W%2BY3yYb3d9N8vSjvm8WrGzVZaAaHbHHcGbcgG%2BoI%3D
&resource=https%3A%2F%2Fgraph.windows.net
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2Rkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tLzE5MjNmODYyLWU2ZGMtNDFhMy04MWRhLTgwMmJhZTAwYWY2ZCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLCJpYXQiOjE0OTM0MjMxNTIsIm5iZiI6MTQ5MzQyMzE1MiwiZXhwIjoxNDkzNDY2NjUyLCJhY3IiOiIxIiwiYWlvIjoiWTJaZ1lCRFF2aTlVZEc0LzM0L3dpQndqbjhYeVp4YmR1TFhmVE1QeG8yYlN2elgreHBVQSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiJiMzE1MDA3OS03YmViLTQxN2YtYTA2YS0zZmRjNzhjMzI1NDUiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MzAyNDAwLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIn0.R-Ke-XO7lK0r5uLwxB8g5CrcPAwRln5SccJCfEjU6IUqpqcjWcDzeDdNOySiVPDU_ZU5knJmzRCF8fcjFtPsaA4R7vdIEbDuOur15FXSvE8FvVSjP_49OH6hBYqoSUAslN3FMfbO6Z8YfCIY4tSOB2I6ahQ_x4ZWFWglC3w5mK-_4iX81bqi95eV4RUKefUuHhQDXtWhrSgIEC0YiluMvA4TnaJdLq_tWXIc4_Tq_KfpkvI004ONKgU7EAMEr1wZ4aDcJV2yf22gQ1sCSig6EGSTmmzDuEPsYiyd4NhidRZJP4HiiQh-hePBQsgcSgYGvz9wC6n57ufYKh2wm_Ti3Q
&requested_token_use=on_behalf_of
&scope=openid

Segundo caso: solicitud de token de acceso con un certificadoSecond case: Access token request with a certificate

Una solicitud de token de acceso entre servicios con un certificado contiene los parámetros siguientes:A service-to-service access token request with a certificate contains the following parameters:

ParámetroParameter DESCRIPCIÓNDescription
grant_typegrant_type requeridorequired Tipo de la solicitud de token.The type of the token request. Una solicitud OBO usa un token de acceso JWT, por lo que el valor debe ser urn:ietf:params:oauth:grant-type:jwt-bearer.An OBO request uses a JWT access token so the value must be urn:ietf:params:oauth:grant-type:jwt-bearer.
Aserciónassertion requeridorequired Valor del token usado en la solicitud.The value of the token used in the request.
client_idclient_id requeridorequired Identificador de aplicación asignado al servicio de llamada durante el registro con Azure AD.The app ID assigned to the calling service during registration with Azure AD. Para buscar el identificador de la aplicación en Azure Portal, seleccione Active Directory, elija el directorio y, por último, seleccione el nombre de la aplicación.To find the app ID in the Azure portal, select Active Directory, choose the directory, and then select the application name.
client_assertion_typeclient_assertion_type requeridorequired El valor debe ser urn:ietf:params:oauth:client-assertion-type:jwt-bearerThe value must be urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertionclient_assertion requeridorequired Debe crear una instancia de JSON Web Token y firmar con el certificado que ha registrado como credenciales de la aplicación.A JSON Web Token that you create and sign with the certificate you registered as credentials for your application. Consulte el artículo acerca de las credenciales de certificado para obtener información sobre el formato de la aserción y de cómo registrar el certificado.See certificate credentials to learn about assertion format and about how to register your certificate.
resourceresource requeridorequired URI del identificador de la aplicación del servicio de recepción (recurso seguro).The app ID URI of the receiving service (secured resource). Para buscar el URI del identificador de la aplicación en Azure Portal, seleccione Active Directory y elija el directorio.To find the app ID URI in the Azure portal, select Active Directory and choose the directory. Seleccione el nombre de la aplicación, elija Todas las opciones y, después, seleccione Propiedades.Select the application name, choose All settings, and then select Properties.
requested_token_userequested_token_use requeridorequired Especifica cómo se debe procesar la solicitud.Specifies how the request should be processed. En el "flujo en nombre de", el valor debe ser on_behalf_of.In the On-Behalf-Of flow, the value must be on_behalf_of.
scopescope requeridorequired Lista de ámbitos separados por un espacio para la solicitud de token.A space separated list of scopes for the token request. Para OpenID Connect, el ámbito openid debe especificarse.For OpenID Connect, the scope openid must be specified.

Estos parámetros son casi iguales a los de la solicitud con un secreto compartido, salvo que el parámetro client_secret parameter se sustituye por los parámetros client_assertion_type y client_assertion.These parameters are almost the same as with the request by shared secret except that the client_secret parameter is replaced by two parameters: client_assertion_type and client_assertion.

EjemploExample

El siguiente elemento HTTP POST solicita un token de acceso para la API web https://graph.windows.net con un certificado.The following HTTP POST requests an access token for the https://graph.windows.net web API with a certificate. El parámetro client_id permite identificar el servicio que solicita el token de acceso.The client_id identifies the service that requests the access token.

// line breaks for legibility only

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

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg
&resource=https%3A%2F%2Fgraph.windows.net
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2Rkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tLzE5MjNmODYyLWU2ZGMtNDFhMy04MWRhLTgwMmJhZTAwYWY2ZCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLCJpYXQiOjE0OTM0MjMxNTIsIm5iZiI6MTQ5MzQyMzE1MiwiZXhwIjoxNDkzNDY2NjUyLCJhY3IiOiIxIiwiYWlvIjoiWTJaZ1lCRFF2aTlVZEc0LzM0L3dpQndqbjhYeVp4YmR1TFhmVE1QeG8yYlN2elgreHBVQSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiJiMzE1MDA3OS03YmViLTQxN2YtYTA2YS0zZmRjNzhjMzI1NDUiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MzAyNDAwLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIn0.R-Ke-XO7lK0r5uLwxB8g5CrcPAwRln5SccJCfEjU6IUqpqcjWcDzeDdNOySiVPDU_ZU5knJmzRCF8fcjFtPsaA4R7vdIEbDuOur15FXSvE8FvVSjP_49OH6hBYqoSUAslN3FMfbO6Z8YfCIY4tSOB2I6ahQ_x4ZWFWglC3w5mK-_4iX81bqi95eV4RUKefUuHhQDXtWhrSgIEC0YiluMvA4TnaJdLq_tWXIc4_Tq_KfpkvI004ONKgU7EAMEr1wZ4aDcJV2yf22gQ1sCSig6EGSTmmzDuEPsYiyd4NhidRZJP4HiiQh-hePBQsgcSgYGvz9wC6n57ufYKh2wm_Ti3Q
&requested_token_use=on_behalf_of
&scope=openid

Respuesta de token de acceso entre serviciosService-to-service access token response

Una respuesta correcta es una respuesta de OAuth 2.0 de JSON con los parámetros siguientes:A success response is a JSON OAuth 2.0 response with the following parameters:

ParámetroParameter DESCRIPCIÓNDescription
token_typetoken_type Indica el valor de tipo de token.Indicates the token type value. El único tipo que admite Azure AD es el portador.The only type that Azure AD supports is Bearer. 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]).For more information about bearer tokens, see the OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
scopescope Ámbito de acceso concedido en el token.The scope of access granted in the token.
expires_inexpires_in Período de validez del token de acceso (en segundos).The length of time the access token is valid (in seconds).
expires_onexpires_on La hora a la que expira el token de acceso.The time when the access token expires. La fecha se representa como el número de segundos desde 1970-01-01T0:0:0Z UTC hasta la fecha de expiración.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. Este valor se utiliza para determinar la duración de los tokens almacenados en caché.This value is used to determine the lifetime of cached tokens.
resourceresource URI del identificador de la aplicación del servicio de recepción (recurso seguro).The app ID URI of the receiving service (secured resource).
access_tokenaccess_token El token de acceso solicitado.The requested access token. El servicio de llamada puede usar este token para autenticarse en el servicio de recepción.The calling service can use this token to authenticate to the receiving service.
ID_tokenid_token Token de identificador solicitado.The requested ID token. El servicio de llamada puede usar este token para verificar la identidad del usuario y comenzar una sesión con el usuario.The calling service can use this token to verify the user's identity and begin a session with the user.
refresh_tokenrefresh_token Token de actualización para el token de acceso solicitado.The refresh token for the requested access token. El servicio de llamada puede usar este token para solicitar otro token de acceso después de que expire el token de acceso actual.The calling service can use this token to request another access token after the current access token expires.

Ejemplo de respuesta correctaSuccess response example

En el ejemplo siguiente se muestra una respuesta correcta a una solicitud de un token de acceso para la API web https://graph.windows.net.The following example shows a success response to a request for an access token for the https://graph.windows.net web API.

{
    "token_type":"Bearer",
    "scope":"User.Read",
    "expires_in":"43482",
    "ext_expires_in":"302683",
    "expires_on":"1493466951",
    "not_before":"1493423168",
    "resource":"https://graph.windows.net",
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiLyIsImlhdCI6MTQ5MzQyMzE2OCwibmJmIjoxNDkzNDIzMTY4LCJleHAiOjE0OTM0NjY5NTEsImFjciI6IjEiLCJhaW8iOiJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJhcHBpZGFjciI6IjEiLCJlX2V4cCI6MzAyNjgzLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJwdWlkIjoiMTAwMzNGRkZBMTJFRDdGRSIsInNjcCI6IlVzZXIuUmVhZCIsInN1YiI6IjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLCJ0aWQiOiIyNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IiLCJ1bmlxdWVfbmFtZSI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXBuIjoibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJ4Q3dmemhhLVAwV0pRT0x4Q0dnS0FBIiwidmVyIjoiMS4wIn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ",
    "refresh_token":"AQABAAAAAABnfiG-mA6NTae7CdWW7QfdjKGu9-t1scy_TDEmLi4eLQMjJGt_nAoVu6A4oSu1KsRiz8XyQIPKQxSGfbf2FoSK-hm2K8TYzbJuswYusQpJaHUQnSqEvdaCeFuqXHBv84wjFhuanzF9dQZB_Ng5za9xKlUENrNtlq9XuLNVKzxEyeUM7JyxzdY7JiEphWImwgOYf6II316d0Z6-H3oYsFezf4Xsjz-MOBYEov0P64UaB5nJMvDyApV-NWpgklLASfNoSPGb67Bc02aFRZrm4kLk-xTl6eKE6hSo0XU2z2t70stFJDxvNQobnvNHrAmBaHWPAcC3FGwFnBOojpZB2tzG1gLEbmdROVDp8kHEYAwnRK947Py12fJNKExUdN0njmXrKxNZ_fEM33LHW1Tf4kMX_GvNmbWHtBnIyG0w5emb-b54ef5AwV5_tGUeivTCCysgucEc-S7G8Cz0xNJ_BOiM_4bAv9iFmrm9STkltpz0-Tftg8WKmaJiC0xXj6uTf4ZkX79mJJIuuM7XP4ARIcLpkktyg2Iym9jcZqymRkGH2Rm9sxBwC4eeZXM7M5a7TJ-5CqOdfuE3sBPq40RdEWMFLcrAzFvP0VDR8NKHIrPR1AcUruat9DETmTNJukdlJN3O41nWdZOVoJM-uKN3uz2wQ2Ld1z0Mb9_6YfMox9KTJNzRzcL52r4V_y3kB6ekaOZ9wQ3HxGBQ4zFt-2U0mSszIAA",
    "id_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8yNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IvIiwiaWF0IjoxNDkzNDIzMTY4LCJuYmYiOjE0OTM0MjMxNjgsImV4cCI6MTQ5MzQ2Njk1MSwiYW1yIjpbInB3ZCJdLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXRpIjoieEN3ZnpoYS1QMFdKUU9MeENHZ0tBQSIsInZlciI6IjEuMCJ9."
}

Ejemplo de respuesta de errorError response example

El punto de conexión del token de Azure AD devuelve una respuesta de error cuando intenta adquirir un token de acceso para una API de bajada que se establece con una directiva de acceso condicional (por ejemplo, la autenticación multifactor).The Azure AD token endpoint returns an error response when it tries to acquire an access token for a downstream API that is set with a Conditional Access policy (for example, multi-factor authentication). El servicio de nivel intermedio debe exponer el error a la aplicación cliente para que esta pueda proporcionar la interacción del usuario necesaria para cumplir la directiva de acceso condicional.The middle-tier service should surface this error to the client application so that the client application can provide the user interaction to satisfy the Conditional Access policy.

{
    "error":"interaction_required",
    "error_description":"AADSTS50079: Due to a configuration change made by your administrator, or because you moved to a new location, you must enroll in multi-factor authentication to access 'bf8d80f9-9098-4972-b203-500f535113b1'.\r\nTrace ID: b72a68c3-0926-4b8e-bc35-3150069c2800\r\nCorrelation ID: 73d656cf-54b1-4eb2-b429-26d8165a52d7\r\nTimestamp: 2017-05-01 22:43:20Z",
    "error_codes":[50079],
    "timestamp":"2017-05-01 22:43:20Z",
    "trace_id":"b72a68c3-0926-4b8e-bc35-3150069c2800",
    "correlation_id":"73d656cf-54b1-4eb2-b429-26d8165a52d7",
    "claims":"{\"access_token\":{\"polids\":{\"essential\":true,\"values\":[\"9ab03e19-ed42-4168-b6b7-7001fb3e933a\"]}}}"
}

Usar el token de acceso para obtener acceso al recurso protegidoUse the access token to access the secured resource

El servicio de nivel intermedio 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.The middle-tier service can use the acquired access token to make authenticated requests to the downstream web API by setting the token in the Authorization header.

EjemploExample

GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.windows.net
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiLyIsImlhdCI6MTQ5MzQyMzE2OCwibmJmIjoxNDkzNDIzMTY4LCJleHAiOjE0OTM0NjY5NTEsImFjciI6IjEiLCJhaW8iOiJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJhcHBpZGFjciI6IjEiLCJlX2V4cCI6MzAyNjgzLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJwdWlkIjoiMTAwMzNGRkZBMTJFRDdGRSIsInNjcCI6IlVzZXIuUmVhZCIsInN1YiI6IjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLCJ0aWQiOiIyNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IiLCJ1bmlxdWVfbmFtZSI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXBuIjoibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJ4Q3dmemhhLVAwV0pRT0x4Q0dnS0FBIiwidmVyIjoiMS4wIn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ

Aserciones de SAML obtenidas con un flujo de OBO de OAuth2.0SAML assertions obtained with an OAuth2.0 OBO flow

Algunos servicios web basados en OAuth necesitan tener acceso a otras API de servicio web que aceptan aserciones de SAML en flujos no interactivos.Some OAuth-based web services need to access other web service APIs that accept SAML assertions in non-interactive flows. Azure Active Directory puede proporcionar una aserción de SAML en respuesta a un flujo de On-Behalf-Of que usa un servicio web basado en SAML como un recurso de destino.Azure Active Directory can provide a SAML assertion in response to an On-Behalf-Of flow that uses a SAML-based web service as a target resource.

Nota

Se trata de una extensión no estándar del flujo de On-Behalf-Of de OAuth 2.0 que permite a una aplicación basada en OAuth2 acceder a puntos de conexión de API de servicio web que consumen tokens SAML.This is a non-standard extension to the OAuth 2.0 On-Behalf-Of flow that allows an OAuth2-based application to access web service API endpoints that consume SAML tokens.

Sugerencia

Cuando llama a un servicio web SAML protegido desde una aplicación web front-end, solo puede llamar a la API e iniciar un flujo de autenticación interactiva normal que usará la sesión existente del usuario.When you call a SAML-protected web service from a front-end web application, you can simply call the API and initiate a normal interactive authentication flow with the user's existing session. Solo debe considerar el uso de un flujo de OBO cuando una llamada entre servicios requiere que un token SAML proporcione el contexto del usuario.You only need to use an OBO flow when a service-to-service call requires a SAML token to provide user context.

Obtener un token SAML mediante una solicitud OBO con un secreto compartidoObtain a SAML token by using an OBO request with a shared secret

Una solicitud de servicio a servicio para una aserción SAML contiene los siguientes parámetros:A service-to-service request for a SAML assertion contains the following parameters:

ParámetroParameter DESCRIPCIÓNDescription
grant_typegrant_type requeridorequired Tipo de la solicitud de token.The type of the token request. En el caso de una solicitud que usa un JWT, el valor debe ser urn:ietf:params:oauth:grant-type:jwt-bearer.For a request that uses a JWT, the value must be urn:ietf:params:oauth:grant-type:jwt-bearer.
Aserciónassertion requeridorequired Valor del token de acceso usado en la solicitud.The value of the access token used in the request.
client_idclient_id requeridorequired Identificador de aplicación asignado al servicio de llamada durante el registro con Azure AD.The app ID assigned to the calling service during registration with Azure AD. Para buscar el identificador de la aplicación en Azure Portal, seleccione Active Directory, elija el directorio y, por último, seleccione el nombre de la aplicación.To find the app ID in the Azure portal, select Active Directory, choose the directory, and then select the application name.
client_secretclient_secret requeridorequired La clave registrada para el servicio de llamada de Azure AD.The key registered for the calling service in Azure AD. Este valor debe haberse anotado en el momento del registro.This value should have been noted at the time of registration.
resourceresource requeridorequired URI del identificador de la aplicación del servicio de recepción (recurso seguro).The app ID URI of the receiving service (secured resource). Este es el recurso que será la audiencia del token SAML.This is the resource that will be the Audience of the SAML token. Para buscar el URI del identificador de la aplicación en Azure Portal, seleccione Active Directory y elija el directorio.To find the app ID URI in the Azure portal, select Active Directory and choose the directory. Seleccione el nombre de la aplicación, elija Todas las opciones y, después, seleccione Propiedades.Select the application name, choose All settings, and then select Properties.
requested_token_userequested_token_use requeridorequired Especifica cómo se debe procesar la solicitud.Specifies how the request should be processed. En el "flujo en nombre de", el valor debe ser on_behalf_of.In the On-Behalf-Of flow, the value must be on_behalf_of.
requested_token_typerequested_token_type requeridorequired Especifica el tipo de token solicitado.Specifies the type of token requested. El valor puede ser urn:ietf:params:oauth:token-type:saml2 o urn:ietf:params:oauth:token-type:saml1, en función de los requisitos del recurso al que se accede.The value can be urn:ietf:params:oauth:token-type:saml2 or urn:ietf:params:oauth:token-type:saml1 depending on the requirements of the accessed resource.

La respuesta contiene un token SAML codificado con UTF8 y Base64url.The response contains a SAML token encoded in UTF8 and Base64url.

  • SubjectConfirmationData para una aserción SAML procedente de una llamada OBO: si la aplicación de destino requiere un valor de destinatario en SubjectConfirmationData, el valor debe ser una dirección URL de respuesta que no sea de caracteres comodín en la configuración de la aplicación de recursos.SubjectConfirmationData for a SAML assertion sourced from an OBO call: If the target application requires a recipient value in SubjectConfirmationData, then the value must be a non-wildcard Reply URL in the resource application configuration.

  • El nodo SubjectConfirmationData: este no puede contener un atributo InResponseTo, ya que no forma parte de una respuesta SAML.The SubjectConfirmationData node: The node can't contain an InResponseTo attribute since it's not part of a SAML response. La aplicación que recibe el token SAML debe tener la capacidad de aceptar la aserción SAML sin el atributo InResponseTo.The application receiving the SAML token must be able to accept the SAML assertion without an InResponseTo attribute.

  • Consentimiento: debe otorgarse un consentimiento con el fin de recibir un token SAML que contenga datos de usuario en un flujo de OAuth.Consent: Consent must have been granted to receive a SAML token containing user data on an OAuth flow. Para obtener información sobre los permisos y el consentimiento del administrador, consulte Permisos y consentimiento en el punto de conexión v1.0 de Azure Active Directory.For information on permissions and obtaining administrator consent, see Permissions and consent in the Azure Active Directory v1.0 endpoint.

Respuesta con aserción SAMLResponse with SAML assertion

ParámetroParameter DESCRIPCIÓNDescription
token_typetoken_type Indica el valor de tipo de token.Indicates the token type value. El único tipo que admite Azure AD es el portador.The only type that Azure AD supports is Bearer. Para más información sobre los tokens de portador, consulte The OAuth2.0 Authorization Framework: Bearer Token Usage (RFC 6750) (Marco de autorización de OAuth2.0: uso del token de portador [RFC 6750]).For more information about bearer tokens, see OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
scopescope Ámbito de acceso concedido en el token.The scope of access granted in the token.
expires_inexpires_in Período de validez del token de acceso (en segundos).The length of time the access token is valid (in seconds).
expires_onexpires_on La hora a la que expira el token de acceso.The time when the access token expires. La fecha se representa como el número de segundos desde 1970-01-01T0:0:0Z UTC hasta la fecha de expiración.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. Este valor se utiliza para determinar la duración de los tokens almacenados en caché.This value is used to determine the lifetime of cached tokens.
resourceresource URI del identificador de la aplicación del servicio de recepción (recurso seguro).The app ID URI of the receiving service (secured resource).
access_tokenaccess_token Parámetro que devuelve la aserción de SAML.The parameter that returns the SAML assertion.
refresh_tokenrefresh_token El token de actualización.The refresh token. El servicio de llamada puede usar este token para solicitar otro token de acceso después de que expire la aserción SAML actual.The calling service can use this token to request another access token after the current SAML assertion expires.
  • token_type: Portadortoken_type: Bearer
  • expires_in: 3296expires_in: 3296
  • ext_expires_in: 0ext_expires_in: 0
  • expires_on: 1529627844expires_on: 1529627844
  • resource: https://api.contoso.comresource: https://api.contoso.com
  • access_token: <Aserción SAML>access_token: <SAML assertion>
  • issued_token_type: urn:ietf:params:oauth:token-type:saml2issued_token_type: urn:ietf:params:oauth:token-type:saml2
  • refresh_token: <Token de actualización>refresh_token: <Refresh token>

Limitaciones del clienteClient limitations

Los clientes públicos con direcciones URL de respuesta con caracteres comodín no pueden utilizar el parámetro id_token con flujos OBO.Public clients with wildcard reply URLs can't use an id_token for OBO flows. Pero un cliente confidencial todavía puede canjear los tokens de acceso adquiridos a través del flujo de concesión implícita, aunque el cliente público tenga registrado un URI de redireccionamiento con caracteres comodín.However, a confidential client can still redeem access tokens acquired through the implicit grant flow even if the public client has a wildcard redirect URI registered.

Pasos siguientesNext steps

Obtenga más información sobre el protocolo OAuth 2.0 y conozca otra manera de realizar la autenticación entre servicios que usa las credenciales del cliente:Learn more about the OAuth 2.0 protocol and another way to perform service-to-service authentication that uses client credentials: