Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a los Servicios de federación de Active Directory (AD FS) 2019 y versiones posteriores
| Scenario | Tutorial de escenarios con ejemplos | Flujo o concesión de OAuth 2.0 | Tipo de cliente |
|---|---|---|---|
| Aplicación de página única | Ejemplo con MSAL | Implicit | Public |
| Aplicación web que inicia sesión de los usuarios | Código de autorización | Público, Confidencial | |
| Api web de llamadas de aplicaciones nativas | Ejemplo con MSAL | Código de autorización | Public |
| Web app llama a la API web | Ejemplo con MSAL | Código de autorización | Confidential |
| Implementación de PKCE | Código de autorización | Public | |
| La API web llama a otra API web en nombre del usuario | Ejemplo con MSAL | On-behalf-of | La aplicación web actúa como confidencial |
| La aplicación demonio llama a la API web | Credenciales de cliente | Confidential | |
| La aplicación web llama a la API web mediante credenciales de usuario | Credenciales de contraseña del propietario del recurso | Público, Confidencial | |
| La aplicación sin explorador llama a la API web | Código de dispositivo | Público, Confidencial |
Flujo de concesión implícita
Note
Microsoft recomienda migrar a Microsoft Entra ID en lugar de actualizar a una versión más reciente de AD FS. Para más información sobre el flujo de concesión implícita en Microsoft Entra ID, consulte Flujo de concesión implícita en Plataforma de identidad de Microsoft.
Para las aplicaciones de página única (AngularJS, Ember.js, React.js, etc.), AD FS admite el flujo de concesión implícita de OAuth 2.0. El flujo implícito se describe en la especificación de OAuth 2.0. Su principal ventaja es que permite que la aplicación obtenga tokens de AD FS sin realizar un intercambio de credenciales del servidor backend. Este flujo permite a la aplicación iniciar la sesión del usuario, mantener la sesión y obtener tokens para otras API web en el código JavaScript del cliente. Hay algunas consideraciones de seguridad importantes que se deben tener en cuenta al usar el flujo implícito, específicamente en torno al cliente.
Si quieres usar el flujo implícito y AD FS para agregar la autenticación a tu aplicación de JavaScript, sigue los pasos generales que se indican a continuación.
Diagrama de protocolo
En el diagrama siguiente se muestra el aspecto del flujo de inicio de sesión implícito completo. En las secciones siguientes se describe cada paso con más detalle.
Solicitar un token de identificador y un token de acceso
Para iniciar sesión inicialmente el usuario en la aplicación, puede enviar una solicitud de autenticación de OpenID Connect y obtener un id_token y un token de acceso desde el punto de conexión de AD FS.
// Line breaks for legibility only
https://adfs.contoso.com/adfs/oauth2/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=id_token+token
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&scope=openid
&response_mode=fragment
&state=12345
| Parameter | Required/optional | Description |
|---|---|---|
| client_id | required | Identificador de aplicación (cliente) que AD FS asignó a la aplicación. |
| response_type | required | Debe incluir id_token para el inicio de sesión en OpenID Connect. También puede incluir el response_type token. El uso token de aquí permite a la aplicación recibir un token de acceso inmediatamente desde el punto de conexión de autorización sin tener que realizar una segunda solicitud al punto de conexión del token. |
| redirect_uri | required | Parámetro redirect_uri de la aplicación, donde la aplicación puede enviar y recibir respuestas de autenticación. Debe coincidir exactamente con uno de los parámetros redirect_uri que configuró en AD FS. |
| nonce | required | Valor generado por la aplicación que se incluye en la solicitud y que se incluirá en el parámetro id_token resultante como una notificación. La aplicación puede comprobar este valor para mitigar los ataques de reproducción del token. El valor suele ser una cadena única aleatoria que se puede usar para identificar el origen de la solicitud. Solo es necesario cuando se solicita un parámetro id_token. |
| scope | optional | Una lista de ámbitos separada por espacios. Para OpenID Connect, debe incluir el ámbito openid. |
| resource | optional | Dirección URL de la API web. Nota: Si usa la biblioteca cliente de MSAL, no se envía el parámetro de recurso. En su lugar, la dirección URL del recurso se envía como parte del parámetro de ámbito: scope = [resource url]//[scope values, for example, openid]si el recurso no se pasa aquí o en el ámbito, AD FS usa un recurso predeterminado urn:microsoft:userinfo. Las directivas de recursos userinfo, como MFA, emisión o directivas de autorización, no se pueden personalizar. |
| response_mode | optional | Especifica el método que debe usarse para enviar el token resultante de nuevo a la aplicación. Tiene como valor predeterminado fragment. |
| state | optional | Un valor incluido en la solicitud que también se devolverá en la respuesta del token. Puede ser una cadena de cualquier contenido que desee. Se utiliza normalmente un valor único generado de forma aleatoria para evitar los ataques de falsificación de solicitudes entre sitios. El estado también se usa para codificar información sobre el estado del usuario en la aplicación antes de que se haya producido la solicitud de autenticación, por ejemplo, la página o vista en la que estaban. |
| prompt | optional | Indica el tipo de interacción del usuario necesaria. Los únicos valores válidos en este momento son el inicio de sesión y ninguno. - prompt=login obliga al usuario a escribir sus credenciales en esa solicitud, negando el inicio de sesión único.
- prompt=none es lo contrario: garantiza que el usuario no se presenta con ningún aviso interactivo. Si la solicitud no se puede completar de forma silenciosa a través del inicio de sesión único, AD FS devuelve un error interaction_required. |
| login_hint | optional | Puede usarse para rellenar previamente el campo de nombre de usuario y dirección de correo electrónico de la página de inicio de sesión del usuario, si sabe su nombre de usuario con antelación. A menudo, las aplicaciones usan este parámetro durante la reautenticación, ya ha extraído el nombre de usuario de un inicio de sesión anterior mediante la upn notificación de id_token. |
| domain_hint | optional | Si se incluye este valor, se omite el proceso de detección basado en dominio que el usuario pasa por la página de inicio de sesión, lo que conduce a una experiencia de usuario ligeramente más simplificada. |
En este punto, se le pide al usuario que escriba sus credenciales y que complete la autenticación. Una vez autenticado el usuario, el punto de conexión de autorización de AD FS devuelve una respuesta a la aplicación en el redirect_uri indicado mediante el método especificado en el parámetro response_mode.
Respuesta correcta
Una respuesta correcta, cuando response_mode=fragment and response_type=id_token+token se usa, tiene este aspecto:
// Line breaks for legibility only
GET https://localhost/myapp/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZEstZnl0aEV...
&token_type=Bearer
&expires_in=3599
&scope=openid
&id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZstZnl0aEV1Q...
&state=12345
| Parameter | Description |
|---|---|
| access_token | Se incluye si response_type tiene token. |
| token_type | Se incluye si response_type tiene token.
BearerSiempre es . |
| expires_in | Se incluye si response_type tiene token. Indica el número de segundos que el token es válido con fines de almacenamiento en caché. |
| scope | Indica los ámbitos en los que el parámetro access_token será válido. |
| id_token | Se incluye si response_type tiene id_token. Un token web JSON (JWT) firmado. La aplicación puede descodificar los segmentos de este token para solicitar información sobre el usuario que ha iniciado sesión. La aplicación puede almacenar en caché los valores y mostrarlos, pero no debe depender de estos para ningún límite de seguridad o autorización. |
| state | Si se incluye un parámetro de estado en la solicitud, debería aparecer el mismo valor en la respuesta. La aplicación debería comprobar que los valores de state de la solicitud y la respuesta sean idénticos. |
Tokens de actualización
La concesión implícita no proporciona tokens de actualización. Tanto id_tokens como access_tokens expiran después de un breve período de tiempo, por lo que la aplicación debe estar preparada para actualizar estos tokens periódicamente. Para actualizar cualquier tipo de token, puede realizar la misma solicitud de iframe oculta que en la sección anterior, mediante el parámetro para controlar el prompt=none comportamiento de la plataforma de identidad. Si desea recibir un nuevo id_token, asegúrese de usar response_type=id_token.
Flujo de concesión de código de autorización
Note
Microsoft recomienda migrar a Microsoft Entra ID en lugar de actualizar a una versión más reciente de AD FS. Para más información sobre el flujo de concesión de código de autorización en Microsoft Entra ID, consulte Flujo de concesión de código de autorización en Plataforma de identidad de Microsoft.
Puede usar la concesión de código de autorización de OAuth 2.0 en aplicaciones web para obtener acceso a recursos protegidos, como las API web. El flujo de código de autorización de OAuth 2.0 se describe en la sección 4.1 de la especificación de OAuth 2.0. Se usa para realizar la autenticación y la autorización en la mayoría de los tipos de aplicaciones, incluidas las aplicaciones web y las aplicaciones instaladas de forma nativa. El flujo permite que las aplicaciones adquieran de forma segura access_tokens que se pueden usar para acceder a los recursos que confían en AD FS.
Diagrama de protocolo
En un nivel alto, el flujo de autenticación de una aplicación nativa tiene un aspecto similar al siguiente:
Solicitud de un código de autorización
El flujo de código de autorización comienza con el cliente que dirige al usuario al punto de conexión /authorize. En esta solicitud, el cliente indica los permisos que debe adquirir del usuario:
// Line breaks for legibility only
https://adfs.contoso.com/adfs/oauth2/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&resource=https://webapi.com/
&scope=openid
&state=12345
| Parameter | Required/optional | Description |
|---|---|---|
| client_id | required | Identificador de aplicación (cliente) que AD FS asignó a la aplicación. |
| response_type | required | Debe incluir código para el flujo de código de autorización. |
| redirect_uri | required | Parámetro redirect_uri de la aplicación, donde la aplicación puede enviar y recibir respuestas de autenticación. Debe coincidir exactamente con uno de los redirect_uris que registró en AD FS para el cliente. |
| resource | optional | Dirección URL de la API web. Nota: Si usa la biblioteca cliente de MSAL, no se envía el parámetro de recurso. En su lugar, la dirección URL del recurso se envía como parte del parámetro de ámbito: scope = [resource url]//[scope values, for example, openid]si el recurso no se pasa aquí o en el ámbito, AD FS usa un recurso predeterminado urn:microsoft:userinfo. Las directivas de recursos userinfo, como MFA, emisión o directivas de autorización, no se pueden personalizar. |
| scope | optional | Una lista de ámbitos separada por espacios. |
| response_mode | optional | Especifica el método que debe usarse para enviar el token resultante de nuevo a la aplicación. Puede ser uno de los métodos siguientes: - query - fragment - form_post query proporciona el código como parámetro de cadena de consulta en el URI de redirección. Si solicita el código, puede usar la consulta, el fragmento o form_post.
form_post ejecuta una prueba POST que contiene el código para el URI de redireccionamiento. |
| state | optional | Un valor incluido en la solicitud que también se devolverá en la respuesta del token. Puede ser una cadena de cualquier contenido que desee. Se utiliza normalmente un valor único generado de forma aleatoria para evitar los ataques de falsificación de solicitudes entre sitios. El valor también puede codificar la información sobre el estado del usuario en la aplicación antes de la solicitud de autenticación, como la página o la vista en la que se encontraba. |
| prompt | optional | Indica el tipo de interacción del usuario necesaria. Los únicos valores válidos en este momento son el inicio de sesión y ninguno. - prompt=login obliga al usuario a escribir sus credenciales en esa solicitud, negando el inicio de sesión único.
- prompt=none es lo contrario: garantiza que el usuario no se presenta con ningún aviso interactivo. Si la solicitud no se puede completar de forma silenciosa a través del inicio de sesión único, AD FS devuelve un error interaction_required. |
| login_hint | optional | Puede usarse para rellenar previamente el campo de nombre de usuario y dirección de correo electrónico de la página de inicio de sesión del usuario, si sabe su nombre de usuario con antelación. A menudo, las aplicaciones usan este parámetro durante la reautenticación, ya ha extraído el nombre de usuario de un inicio de sesión anterior mediante la upnnotificación de id_token. |
| domain_hint | optional | Si se incluye este valor, se omite el proceso de detección basado en dominio que el usuario pasa por la página de inicio de sesión, lo que conduce a una experiencia de usuario ligeramente más simplificada. |
| code_challenge_method | optional | Método utilizado para codificar el parámetro code_verifier para el parámetro code_challenge. Puede ser uno de los siguientes valores: - sin formato - S256 Si se excluye este valor, se supone que code_challenge es texto no cifrado si code_challenge se incluye. AD FS admite tanto plain como S256. Para obtener más información, consulte PKCE RFC. |
| code_challenge | optional | Se usa para proteger concesiones de código de autorización a través de la clave de prueba para intercambio de códigos (PKCE) desde un cliente nativo. Obligatorio si se incluye code_challenge_method. Para obtener más información, consulte PKCE RFC. |
En este punto, se le pide al usuario que escriba sus credenciales y que complete la autenticación. Una vez autenticado el usuario, AD FS devuelve una respuesta a la aplicación en el indicado redirect_urimediante el método especificado en el response_mode parámetro .
Respuesta correcta
Una respuesta correcta, cuando se usa response_mode=query, tiene este aspecto:
GET https://adfs.contoso.com/common/oauth2/nativeclient?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=12345
| Parameter | Description |
|---|---|
| code | Parámetro authorization_code solicitado por la aplicación. La aplicación puede utilizar el código de autorización para solicitar un token de acceso para el recurso de destino.
authorization_codeson de corta duración. Normalmente expiran después de unos 10 minutos. |
| state | Si un parámetro state está incluido en la solicitud, debería aparecer el mismo valor en la respuesta. La aplicación debería comprobar que los valores de state de la solicitud y la respuesta sean idénticos. |
Solicitar un token de acceso
Ahora que ha adquirido un parámetro authorization_code y que el usuario le ha concedido permiso, puede canjear el código por un parámetro access_token para el recurso deseado. Canjee el código mediante el envío de una solicitud POST al punto de conexión /token:
// Line breaks for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: https://adfs.contoso.com/
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh // NOTE: Only required for confidential clients (web apps)
| Parameter | Required/optional | Description |
|---|---|---|
| client_id | required | Identificador de aplicación (cliente) que AD FS asignó a la aplicación. |
| grant_type | required | Debe ser authorization_code para el flujo de código de autorización. |
| code | required | El authorization_code que adquirió en la primera etapa del flujo. |
| redirect_uri | required | El mismo valor de redirect_uri que usó para obtener authorization_code. |
| client_secret | necesario para las aplicaciones web | Secreto de la aplicación que creaste durante el registro de la aplicación en AD FS. No debes usar el secreto de aplicación en una aplicación nativa porque el parámetro client_secrets no se puede almacenar de forma confiable en los dispositivos. Este parámetro es necesario para las aplicaciones web y las API web, que tienen la capacidad de almacenar el client_secret de forma segura en el lado servidor. El secreto de cliente debe estar formateado con codificación URL antes de enviarse. Estas aplicaciones también pueden usar la autenticación basada en claves si firman un JWT y lo agregan como parámetro client_assertion. |
| code_verifier | optional | Mismo parámetro code_verifier usado para obtener el parámetro authorization_code. Se requiere si PKCE se utilizó en la solicitud de concesión de código de autorización. Para obtener más información, consulte PKCE RFC. Esta opción se aplica a AD FS 2019 y versiones posteriores. |
Respuesta correcta
Una respuesta de token correcta tiene este aspecto:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"token_type": "Bearer",
"expires_in": 3599,
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"refresh_token_expires_in": 28800,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}
| Parameter | Description |
|---|---|
| access_token | El token de acceso solicitado. La aplicación puede usar este token para autenticarse en el recurso protegido (API web). |
| token_type | Indica el valor de tipo de token. El único tipo que admite AD FS es Bearer. |
| expires_in | Tiempo de validez del token de acceso (en segundos). |
| refresh_token | Un token de actualización de OAuth 2.0. La aplicación puede utilizar este token para obtener más tokens de acceso una vez que expire el token de acceso actual. Refresh_tokens son de larga duración y se pueden usar para conservar el acceso a los recursos durante largos períodos de tiempo. |
| refresh_token_expires_in | Tiempo de validez del token de actualización (en segundos). |
| id_token | Un JWT. La aplicación puede descodificar los segmentos de este token para solicitar información sobre el usuario que ha iniciado sesión. La aplicación puede almacenar en caché los valores y mostrarlos, pero no debe depender de estos para ningún límite de seguridad o autorización. |
Uso del token de acceso
GET /v1.0/me/messages
Host: https://webapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
Actualización del flujo de concesión de tokens
Los parámetros access_token tienen una duración corta y deben actualizarse cuando expiren para seguir teniendo acceso a los recursos. Para hacerlo, puedes enviar otra solicitud POST al punto de conexión /token y proporcionar el parámetro refresh_token en lugar del código esta vez. Los tokens de actualización son válidos para todos los permisos para los que el cliente ya ha recibido tokens de acceso.
Los tokens de actualización no tienen una duración especificada. Normalmente, las duraciones de este tipo de tokens son relativamente largas. Sin embargo, en algunos casos, los tokens de actualización expiran, se revocan o carecen de privilegios suficientes para realizar la acción deseada. Su aplicación debe esperar y controlar los errores que devuelve el punto de conexión de emisión de tokens correctamente.
Aunque los tokens de actualización no se revocan cuando se usan para adquirir nuevos tokens de acceso, se espera que descarte el token de actualización anterior. La especificación OAuth 2.0 dice: "El servidor de autorización puede emitir un nuevo token de actualización, en cuyo caso el cliente DEBE descartar el token de actualización anterior y reemplazarlo por el nuevo token de actualización. El servidor de autorización PUEDE revocar el token de actualización anterior después de emitir un nuevo token de actualización al cliente". AD FS emite tokens de actualización cuando la nueva duración del token de actualización es mayor que la vigencia anterior del token de actualización. Para ver información adicional sobre la duración del token de actualización de AD FS, consulte Configuración de inicio de sesión único de AD FS.
// Line breaks for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=JqQX2PNo9bpM0uEihUPzyrh // NOTE: Only required for confidential clients (web apps)
| Parameter | Required/optional | Description |
|---|---|---|
| client_id | required | Identificador de aplicación (cliente) que AD FS asignó a la aplicación. |
| grant_type | required | Debe ser refresh_token para este segmento del flujo de código de autorización. |
| resource | optional | Dirección URL de la API web. Nota: Si usa la biblioteca cliente de MSAL, no se envía el parámetro de recurso. En su lugar, la dirección URL del recurso se envía como parte del parámetro de ámbito: scope = [resource url]//[scope values, for example, openid]si el recurso no se pasa aquí o en el ámbito, AD FS usa un recurso predeterminado urn:microsoft:userinfo. Las directivas de recursos userinfo, como MFA, emisión o directivas de autorización, no se pueden personalizar. |
| scope | optional | Una lista de ámbitos separada por espacios. |
| refresh_token | required | Parámetro refresh_token que adquiriste en el segundo segmento del flujo. |
| client_secret | necesario para las aplicaciones web | El secreto de la aplicación que creó en el portal de registro de aplicaciones para su aplicación. No debe usarse en una aplicación nativa, ya que los parámetros client_secrets no se pueden almacenar de manera confiable en los dispositivos. Este parámetro es necesario para las aplicaciones web y las API web, que tienen la capacidad de almacenar el client_secret de forma segura en el lado servidor. Estas aplicaciones también pueden usar la autenticación basada en claves si firman un JWT y lo agregan como parámetro client_assertion. |
Respuesta correcta
Una respuesta de token correcta tiene este aspecto:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"token_type": "Bearer",
"expires_in": 3599,
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"refresh_token_expires_in": 28800,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}
| Parameter | Description |
|---|---|
| access_token | El token de acceso solicitado. La aplicación puede usar este token para autenticarse en el recurso protegido, como una API web. |
| token_type | Indica el valor de tipo de token. El único tipo que admite AD FS es Bearer. |
| expires_in | Tiempo de validez del token de acceso (en segundos). |
| scope | Ámbitos en los que es válido el parámetro access_token. |
| refresh_token | Un token de actualización de OAuth 2.0. La aplicación puede utilizar este token para obtener más tokens de acceso una vez que expire el token de acceso actual. Refresh_tokens son de larga duración y se pueden usar para conservar el acceso a los recursos durante largos períodos de tiempo. |
| refresh_token_expires_in | Tiempo de validez del token de actualización (en segundos). |
| id_token | Un JWT. La aplicación puede descodificar los segmentos de este token para solicitar información sobre el usuario que ha iniciado sesión. La aplicación puede almacenar en caché los valores y mostrarlos, pero no debe depender de estos para ningún límite de seguridad o autorización. |
Compatibilidad con la clave de prueba para intercambio de código (PKCE) de OAuth
Los clientes públicos de OAuth que usan la concesión de código de autorización son vulnerables a los ataques de interceptación de código de autorización, como se describe en RFC 7636. Para mitigar estos ataques, a partir de Windows Server 2019, AD FS admite la clave de prueba para El intercambio de código (PKCE) para el flujo de concesión de código de autorización de OAuth.
La especificación de compatibilidad de PKCE agrega más parámetros a las solicitudes de token de acceso y autorización de OAuth 2.0. En el diagrama siguiente se muestra un esquema del proceso PKCE cuando un cliente se pone en contacto con AD FS en Windows Server 2019.
En la sección denominada A, el cliente crea y registra un secreto denominado code_verifier y deriva una versión transformada del secreto denominado t(code_verifier), también conocido como code_challenge. A continuación, el cliente envía el secreto en la solicitud de autorización de OAuth 2.0 junto con el método de t_m transformación.
En la sección denominada B, el punto de conexión de autorización responde de la forma habitual, pero registra el secreto t(code_verifier) y el método de transformación.
En la sección con la etiqueta C, el cliente envía el código de autorización en la solicitud de token de acceso como de costumbre, pero incluye el secreto generado en la code_verifier sección A.
En la sección con la etiqueta D, AD FS transforma el code_verifiersecreto y lo compara con el secreto de la t(code_verifier) sección B. Si sus valores no son iguales, AD FS deniega el acceso.
Cómo elegir varios proveedores de autenticación para la misma directiva de reglas en Windows Server 2019
AD FS ya admite la activación de la autenticación adicional basada en las directivas de reglas de notificación (RP). Puede establecer estas directivas para un rp determinado o a nivel global. Puede establecer una directiva de autenticación adicional para un rp determinado abriendo PowerShell como administrador y ejecutando el cmdlet Set-AdfsRelyingPartyTrust , pasando el parámetro AdditionalAuthenticationRules o AdditionalAuthenticationRulesFile . Para establecerlo globalmente, un administrador puede usar el cmdlet Set-AdfsAdditionalAuthenticationRule . Establecer directivas adicionales le permite usar más de un proveedor de autenticación para la misma aplicación.
Las reglas de notificación proporcionan la opción de seleccionar el proveedor de autenticación para la autenticación adicional, lo que resulta beneficioso en situaciones en las que los clientes cambian entre proveedores o necesitan un proveedor distinto para determinadas aplicaciones. A partir de Windows Server 2019, puede usar reglas de notificaciones para decidir qué otro proveedor de autenticación invocar para la autenticación adicional. Esta característica es útil en dos escenarios:
Los usuarios pasan de un proveedor de autenticación a otro. A medida que incorporan usuarios a un proveedor de autenticación más reciente, estos pueden utilizar grupos para controlar qué proveedor de autenticación adicional utiliza el servicio.
Los usuarios necesitan un proveedor de autenticación adicional específico para determinadas aplicaciones, pero también necesitan usar un método diferente para otras aplicaciones.
Puede configurar estas opciones ejecutando el siguiente comando desde otras directivas de autenticación:
Set-AdfsAdditionalAuthenticationRule -AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
Para configurar esta regla, debe emitir la notificación http://schemas.microsoft.com/claims/authnmethodsproviders desde otras políticas de autenticación. El valor de esta notificación debe ser la variable Name del proveedor de autenticación.
También puede modificar la configuración de esta regla para ayudar a los usuarios a pasar de un proveedor de autenticación a otro. Por ejemplo, supongamos que desea modificar un grupo que administra para usar la autenticación multifactor (MFA) de Microsoft Entra y un grupo para usar certificados como proveedor de autenticación adicional.
Si desea realizar un seguimiento del número de personas que se registran para la autenticación de certificados y MFA, puede ejecutar un comando como este, con los valores reemplazados por los valores pertinentes para su organización:
'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "http://schemas.microsoft.com/claims/multipleauthn" );
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-21-608905689-872870963-3921916988-12345"] => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsproviders", Value = "AzureMfaAuthentication");
not exists([Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value=="S-1-5-21-608905689-872870963-3921916988-12345"]) => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsproviders", Value = "CertificateAuthentication");’
A continuación, puede establecer la primera aplicación, denominada AppA, para usar MFA como proveedor de autenticación adicional mediante la ejecución de este comando:
Set-AdfsRelyingPartyTrust -TargetName AppA -AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "http://schemas.microsoft.com/claims/multipleauthn" );
c:[] => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsproviders", Value = "AzureMfaAuthentication");'
Por último, puede establecer la segunda aplicación, denominada AppB, para usar certificados como proveedor de autenticación adicional mediante la ejecución de este comando:
Set-AdfsRelyingPartyTrust -TargetName AppB -AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "http://schemas.microsoft.com/claims/multipleauthn" );
c:[] => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsproviders", Value = "CertificateAuthentication");'
Los administradores también pueden hacer reglas para permitir más de un proveedor de autenticación adicional. En este caso, AD FS muestra los proveedores de métodos de autenticación emitidos y un usuario puede elegir cualquiera de ellos. Para permitir varios proveedores de autenticación adicionales, deben emitir varias notificaciones mediante el valor http://schemas.microsoft.com/claims/authnmethodsproviders.
Si la evaluación de notificaciones no devuelve ninguno de los proveedores de autenticación, AD FS revierte y muestra una lista que contiene todos los proveedores de autenticación adicionales configurados por el administrador en AD FS. A continuación, el usuario debe seleccionar manualmente el proveedor de autenticación adecuado.
Si el proveedor de autenticación que prefiere no está en la lista, puede ejecutar el siguiente cmdlet para ver todos los proveedores admitidos:
(Get-AdfsGlobalAuthenticationPolicy).AdditionalAuthenticationProvider
El valor que usa para la http://schemas.microsoft.com/claims/authnmethodsproviders notificación debe ser uno de los nombres de proveedor devueltos por la lista de proveedores devueltos por AD FS.
AD FS no admite el desencadenamiento de un proveedor de autenticación adicional determinado mientras el RP usa directivas de control de acceso en AD FS Windows Server 2016. Al mover una aplicación fuera de una directiva de control de acceso, AD FS copia la directiva correspondiente de la directiva de control de acceso a AdditionalAuthenticationRules y IssuanceAuthorizationRules. Si un administrador quiere usar un proveedor de autenticación específico, debe dejar de usar la directiva de control de acceso y, en su lugar, modificar AdditionalAuthenticationRules.
On-Behalf-Of flow
Note
Microsoft recomienda migrar a Microsoft Entra ID en lugar de actualizar a una versión más reciente de AD FS. Para más información sobre el flujo con derechos delegados en Microsoft Entra ID, consulte Flujo con derechos delegados en Plataforma de identidad de Microsoft.
El flujo con derechos delegados de OAuth 2.0 sirve para el caso de uso en el que una aplicación invoca una API de servicio o web, que a su vez necesita llamar a otra API de servicio o web. La idea es propagar la identidad y los permisos del usuario delegado a través de la cadena de solicitud. Para que el servicio de nivel intermedio realice solicitudes autenticadas en el servicio de bajada, debe proteger un token de acceso de AD FS, en nombre del usuario.
Diagrama de protocolo
Supongamos que un usuario se autentica en una aplicación mediante el flujo de concesión de código de autorización de OAuth 2.0 descrito en la sección anterior. En este punto, la aplicación tiene un token de acceso para la API A (token A) con las notificaciones y el consentimiento del usuario para acceder a la API web de nivel intermedio (API A). Asegúrese de que el cliente solicita user_impersonation ámbito en el token. Ahora, la API A debe realizar una solicitud autenticada a la API web de bajada (API B).
Los pasos siguientes constituyen el flujo con derechos delegados y se explican con la ayuda del diagrama siguiente.
- La aplicación cliente realiza una solicitud a la API A con el token A. (Al configurar el flujo de OBO en AD FS, asegúrese de que el ámbito
user_impersonationestá seleccionado y de que los clientes solicitanuser_impersonationámbito en la solicitud). - La API A se autentica en el punto de conexión de emisión de tokens de AD FS y solicita un token para acceder a la API B. (Al configurar este flujo en AD FS, asegúrese de que la API A también está registrada como una aplicación de servidor con un identificador de cliente que tenga el mismo valor que el identificador de recurso en la API A).
- El punto de conexión de emisión de tokens de AD FS valida las credenciales de la API A con el token A y emite el token de acceso para la API B (token B).
- El token B se establece en el encabezado de autorización de la solicitud a la API B.
- La API B devuelve los datos del recurso protegido.
Solicitud de token de acceso de servicio a servicio
Para solicitar un token de acceso, realice una solicitud HTTP POST al punto de conexión del token de AD FS con los parámetros descritos en las secciones siguientes.
Primer caso: solicitud de token de acceso con un secreto compartido
Para un secreto compartido, una solicitud de token de acceso de servicio a servicio contiene los parámetros siguientes:
| Parameter | Required/optional | Description |
|---|---|---|
| grant_type | required | Tipo de solicitud de token. Para una solicitud que utilice un JWT, el valor debe ser urn:ietf:params:oauth:grant-type:jwt-bearer. |
| client_id | required | El identificador de cliente que configure al registrar la primera API web como una aplicación de servidor (aplicación de nivel intermedio). Debe ser el mismo que el identificador de recurso usado en la primera fase, es decir, la dirección URL de la primera API web. |
| client_secret | required | El secreto de la aplicación que ha creado durante el registro de la aplicación de servidor en AD FS. |
| assertion | required | Valor del token usado en la solicitud. |
| requested_token_use | required | Especifica cómo se debe procesar la solicitud. En el flujo de OBO, el valor debe establecerse en on_behalf_of. |
| resource | required | El identificador de recurso proporcionado al registrar la primera API web como aplicación de servidor (aplicación de nivel intermedio). El identificador de recurso debe ser la dirección URL de las llamadas de aplicación de nivel intermedio de la segunda API web en nombre del cliente. |
| scope | optional | Una lista separada por espacios de ámbitos para la solicitud de token. |
Example
A continuación se HTTP POST solicita un token de acceso y un token de actualización.
// Line breaks for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&client_id=https://webapi.com/
&client_secret=BYyVnAt56JpLwUcyo47XODd
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm…
&resource=https://secondwebapi.com/
&requested_token_use=on_behalf_of
&scope=openid
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:
| Parameter | Required/optional | Description |
|---|---|---|
| grant_type | required | Tipo de solicitud de token. Para una solicitud que utilice un JWT, el valor debe ser urn:ietf:params:oauth:grant-type:jwt-bearer. |
| client_id | required | El identificador de cliente que configure al registrar la primera API web como una aplicación de servidor (aplicación de nivel intermedio). Debe ser el mismo que el identificador de recurso usado en la primera fase, es decir, la dirección URL de la primera API web. |
| client_assertion_type | required | El valor debe ser urn:ietf:params:oauth:client-assertion-type:jwt-bearer. |
| client_assertion | required | Aserción (JWT) que debe crear y firmar con el certificado que registró como credenciales para la aplicación. |
| assertion | required | Valor del token usado en la solicitud. |
| requested_token_use | required | Especifica cómo se debe procesar la solicitud. En el flujo de OBO, el valor debe establecerse en on_behalf_of. |
| resource | required | El identificador de recurso proporcionado al registrar la primera API web como aplicación de servidor (aplicación de nivel intermedio). El identificador de recurso debe ser la dirección URL de las llamadas de aplicación de nivel intermedio de la segunda API web en nombre del cliente. |
| scope | optional | Una lista separada por espacios de ámbitos para la solicitud de token. |
Observe que los parámetros son casi los mismos. Este ejemplo es similar a la solicitud por secreto compartido, salvo que el parámetro client_secret se reemplaza por dos parámetros: client_assertion_type y client_assertion.
Example
El siguiente HTTP POST solicita un token de acceso para la API web con un certificado.
// Line breaks for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id= https://webapi.com/
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNS…
&resource=https://secondwebapi.com/
&requested_token_use=on_behalf_of
&scope= openid
Respuesta del token de acceso de servicio a servicio
Una respuesta correcta es una respuesta JSON OAuth 2.0 que tiene los parámetros siguientes.
| Parameter | Description |
|---|---|
| token_type | Indica el valor de tipo de token. El único tipo que admite AD FS es Bearer. |
| scope | Ámbito de acceso concedido en el token. |
| expires_in | Tiempo de validez en segundos del token de acceso. |
| access_token | El token de acceso solicitado. El servicio de llamada puede usar este token para autenticarse en el servicio de recepción. |
| id_token | Un JWT. La aplicación puede descodificar los segmentos de este token para solicitar información sobre el usuario que ha iniciado sesión. La aplicación puede almacenar en caché los valores y mostrarlos, pero no debe depender de estos para ningún límite de seguridad o autorización. |
| refresh_token | Token de actualización para el token de acceso solicitado. El servicio de llamada puede usar este token para solicitar otro token de acceso cuando expire el token de acceso actual. |
| Refresh_token_expires_in | Tiempo de validez en segundos del token de actualización. |
Ejemplo de respuesta correcta
En el ejemplo siguiente se muestra una respuesta correcta a una solicitud de un token de acceso para la API web.
{
"token_type": "Bearer",
"scope": openid,
"expires_in": 3269,
"access_token": "eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCbmZpRy1t"
"id_token": "aWRfdG9rZW49ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKU1V6STFOa"
"refresh_token": "OAQABAAAAAABnfiG…"
"refresh_token_expires_in": 28800,
}
Uso del token de acceso para acceder al recurso protegido
Ahora, el servicio de nivel intermedio puede usar el token adquirido en el ejemplo de respuesta anterior para realizar solicitudes autenticadas a la API web de nivel inferior. Establezca el token en el encabezado Autorización.
Example
GET /v1.0/me HTTP/1.1
Host: https://secondwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCbmZpRy1tQ…
Flujo de concesión de credenciales de cliente
Note
Microsoft recomienda migrar a Microsoft Entra ID en lugar de actualizar a una versión más reciente de AD FS. Para más información sobre el flujo de concesión de credenciales de cliente en Microsoft Entra ID, consulte Flujo de concesión de credenciales de cliente en Plataforma de identidad de Microsoft.
Puede usar la concesión de credenciales de cliente de OAuth 2.0 especificada en RFC 6749 para acceder a los recursos hospedados en web mediante la identidad de una aplicación. Este tipo de concesión se usa principalmente para las interacciones entre servidores que se deben ejecutar en segundo plano, sin la interacción inmediata con un usuario. Estos tipos de aplicaciones suelen denominarse demonios o cuentas de servicio.
El flujo de concesión de credenciales de cliente de OAuth 2.0 permite que un servicio web (cliente confidencial) use sus propias credenciales para autenticarse al llamar a otro servicio web, en lugar de suplantar a un usuario. En este escenario, el cliente suele ser un servicio web de nivel intermedio, un servicio de demonio o un sitio web. Para obtener un mayor nivel de garantía, AD FS también permite al servicio de llamada usar un certificado (en lugar de un secreto compartido) como credencial.
Diagrama de protocolo
En el diagrama siguiente se muestra el flujo de concesión de credenciales de cliente.
Solicitar un token
Para obtener un token mediante la concesión de credenciales de cliente, envíe una POST solicitud al punto de conexión de /token AD FS, como se muestra en las secciones siguientes.
Primer caso: solicitud de token de acceso con un secreto compartido
POST /adfs/oauth2/token HTTP/1.1
// Line breaks for legibility only
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials
| Parameter | Required/optional | Description |
|---|---|---|
| client_id | required | Identificador de aplicación (cliente) que AD FS asignó a la aplicación. |
| scope | optional | Lista separada por espacios de los ámbitos que quiere que consienta el usuario. |
| client_secret | required | El secreto de cliente que generó para la aplicación en el portal de registro de aplicaciones. El secreto de cliente debe estar formateado con codificación URL antes de enviarse. |
| grant_type | required | Se debe establecer en client_credentials. |
Segundo caso: solicitud de token de acceso con un certificado
POST /adfs/oauth2/token HTTP/1.1
// Line breaks for legibility only
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
&client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&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
| Parameter | Required/optional | Description |
|---|---|---|
| client_assertion_type | required | El valor debe estar establecido en urn:ietf:params:oauth:client-assertion-type:jwt-bearer. |
| client_assertion | required | Aserción (JWT) que debe crear y firmar con el certificado que registró como credenciales para la aplicación. |
| grant_type | required | Se debe establecer en client_credentials. |
| client_id | optional | Identificador de aplicación (cliente) que AD FS asignó a la aplicación. Forma parte de client_assertion, por lo que no es necesario aquí. |
| scope | optional | Lista separada por espacios de los ámbitos que quiere que consienta el usuario. |
Uso de un token
Ahora que has adquirido un token, úsalo para realizar solicitudes al recurso. Cuando el token expire, repite la solicitud al punto de conexión /token para adquirir un token de acceso nuevo.
GET /v1.0/me/messages
Host: https://webapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
Flujo de concesión de credenciales de contraseña del propietario del recurso (no recomendado)
Note
Microsoft recomienda migrar a Microsoft Entra ID en lugar de actualizar a una versión más reciente de AD FS. Para más información sobre el flujo de concesión de credenciales de contraseña del administrador del recurso en Microsoft Entra ID, consulte Flujo de concesión de credenciales de contraseña de propietario de recursos en Plataforma de identidad de Microsoft.
La concesión de credenciales de contraseña del propietario del recurso (ROPC) permite a una aplicación iniciar la sesión del usuario mediante el control directo de su contraseña. El flujo ROPC requiere un alto grado de confianza y exposición del usuario. Debe usar este flujo solo cuando no pueda usar otros flujos que sean más seguros.
Diagrama de protocolo
En el diagrama siguiente se muestra el flujo de ROPC.
Solicitud de autorización
El flujo de ROPC es una solicitud única: envía la identificación del cliente y las credenciales del usuario al IDP y, a cambio, recibe los tokens. El cliente debe solicitar la dirección de correo electrónico (UPN) y la contraseña del usuario antes de hacerlo. Inmediatamente después de que una solicitud se realice correctamente, el cliente deberá liberar de manera segura las credenciales del usuario de la memoria. Nunca deben guardarse.
// Line breaks and spaces are for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope= openid
&username=myusername@contoso.com
&password=SuperS3cret
&grant_type=password
| Parameter | Required/optional | Description |
|---|---|---|
| client_id | required | Id. de cliente. |
| grant_type | required | Se debe establecer en password. |
| username | required | Dirección de correo electrónico del usuario. |
| password | required | Contraseña del usuario. |
| scope | optional | Una lista de ámbitos separada por espacios. |
Respuesta de autenticación correcta
En el ejemplo siguiente se muestra una respuesta de token correcta:
{
"token_type": "Bearer",
"scope": "openid",
"expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIn...",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"refresh_token_expires_in": 28800,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDR..."
}
| Parameter | Description |
|---|---|
| token_type | Siempre se establece en Bearer. |
| scope | Si se devolvió un token de acceso, este parámetro muestra los ámbitos para los que el token de acceso es válido. |
| expires_in | Número de segundos de validez del token de acceso incluido. |
| access_token | Se emite para los ámbitos solicitados. |
| id_token | Un JWT. La aplicación puede descodificar los segmentos de este token para solicitar información sobre el usuario que ha iniciado sesión. La aplicación puede almacenar en caché los valores y mostrarlos, pero no debe depender de estos para ningún límite de seguridad o autorización. |
| refresh_token_expires_in | Número de segundos de validez del token de actualización incluido. |
| refresh_token | Se emite si el parámetro de ámbito original incluye offline_access. |
Puede usar el token de actualización para adquirir nuevos tokens de acceso y tokens de actualización mediante el mismo flujo descrito en la sección flujo de concesión de código de autenticación de este artículo.
Flujo de código de dispositivo
Note
Microsoft recomienda migrar a Microsoft Entra ID en lugar de actualizar a una versión más reciente de AD FS. Para más información sobre el flujo de código de dispositivo en Microsoft Entra ID, consulte Flujo de código de dispositivo en Plataforma de identidad de Microsoft.
La concesión de código de dispositivo permite a los usuarios iniciar sesión en dispositivos con restricciones de entrada, como un televisor inteligente, un dispositivo IoT o una impresora. Para habilitar este flujo, el dispositivo exige al usuario visitar una página web en el explorador o en otro dispositivo para iniciar sesión. Una vez que el usuario inicia sesión, el dispositivo puede obtener tokens de acceso y actualizar los tokens según sea necesario.
Diagrama de protocolo
Todo el flujo de código del dispositivo es similar al que se muestra en el diagrama siguiente. Cada uno de los pasos se describe más adelante en este artículo.
Solicitud de autorización de dispositivo
El cliente debe primero realizar una comprobación con el servidor de autenticación para obtener un código de usuario y dispositivo que se usa para iniciar la autenticación. El cliente recopila esta solicitud desde el punto de conexión /devicecode. En esta solicitud, el cliente también debe incluir los permisos que necesita obtener por parte del usuario. Desde el momento en que se envía esta solicitud, el usuario solo tiene 15 minutos para iniciar sesión (el valor habitual de expires_in), por lo que solo debe realizar esta solicitud cuando el usuario haya indicado que está listo para iniciar sesión.
// Line breaks are for legibility only
POST https://adfs.contoso.com/adfs/oauth2/devicecode
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
scope=openid
| Parameter | Condition | Description |
|---|---|---|
| client_id | required | Identificador de aplicación (cliente) que AD FS asignó a la aplicación. |
| scope | optional | Una lista de ámbitos separada por espacios. |
Respuesta de autorización de dispositivo
Una respuesta correcta es un objeto JSON que contenga la información necesaria para permitir que el usuario inicie sesión.
| Parameter | Description |
|---|---|
| device_code | Cadena larga usada para comprobar la sesión entre el cliente y el servidor de autorización. El cliente utiliza este parámetro para solicitar el token de acceso al servidor de autorización. |
| user_code | Cadena corta que se muestra al usuario y que se usa para identificar la sesión en un dispositivo secundario. |
| verification_uri | URI al que debe acudir el usuario con el parámetro user_code para poder iniciar sesión. |
| verification_uri_complete | Identificador URI al que el usuario debe ir con el user_code para iniciar sesión. Se rellena previamente con user_code para que el usuario no necesite escribir ese valor. |
| expires_in | Número de segundos antes de que expiren los códigos de device_code y user_code. |
| interval | Número de segundos que el cliente debe esperar entre las solicitudes de sondeo. |
| message | Cadena legible con instrucciones para el usuario. Para localizarlo, incluya un parámetro de consulta en la solicitud con el formato ?mkt=xx-XX, rellenando el código de referencia cultural de idioma adecuado. |
Autenticación del usuario
Una vez que el cliente recibe el user_code y verification_uri, muestra estos detalles al usuario, instruyéndolas para iniciar sesión con su teléfono móvil o explorador de PC. Además, el cliente puede usar un código QR o un mecanismo similar para mostrar el parámetro verfication_uri_complete, con lo que el parámetro user_code se escribirá automáticamente.
Mientras el usuario se autentica en verification_uri, el cliente debe sondear el punto de conexión /token del token solicitado mediante el valor de device_code.
POST https://adfs.contoso.com /adfs/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type: urn:ietf:params:oauth:grant-type:device_code
client_id: 00001111-aaaa-2222-bbbb-3333cccc4444
device_code: GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8
| Parameter | Required/optional | Description |
|---|---|---|
| grant_type | required | Debe ser urn:ietf:params:oauth:grant-type:device_code. |
| client_id | required | Debe coincidir con el valor de client_id utilizado en la solicitud inicial. |
| code | required | Valor de device_code devuelto en la solicitud de autorización de dispositivo. |
Respuesta de autenticación correcta
Una respuesta de token correcta puede incluir estos parámetros:
| Parameter | Description |
|---|---|
| token_type | Siempre Bearer. |
| scope | Si se devolvió un token de acceso, muestra los ámbitos para los que el token de acceso es válido. |
| expires_in | Número de segundos en que el token de acceso incluido es válido. |
| access_token | Se emite para los ámbitos solicitados. |
| id_token | Se emite si el parámetro de ámbito original incluye el ámbito openid. |
| refresh_token | Se emite si el parámetro de ámbito original incluye offline_access. |
| refresh_token_expires_in | Número de segundos en que el token de actualización incluido es válido. |
Contenido relacionado
Consulta Desarrollo de AD FS para obtener una lista completa de los artículos de tutoriales, que te proporcionan instrucciones paso a paso sobre el uso de los flujos relacionados.