Compartir a través de


Trabajo con tokens de OAuth en la autenticación de Azure App Service

Este artículo se muestra cómo trabajar con tokens OAuth al utilizar la Autenticación y autorización integradas en Azure App Service.

Recuperación de los tokens en el código de aplicación

Desde el código de servidor, los tokens específicos del proveedor se insertan en el encabezado de solicitud para que pueda acceder fácilmente a ellos.

En la tabla siguiente se enumeran los posibles nombres de encabezado de token:

Proveedor Nombres de encabezados
Microsoft Entra X-MS-TOKEN-AAD-ID-TOKEN
X-MS-TOKEN-AAD-ACCESS-TOKEN
X-MS-TOKEN-AAD-EXPIRES-ON
X-MS-TOKEN-AAD-REFRESH-TOKEN
Token de Facebook X-MS-TOKEN-FACEBOOK-ACCESS-TOKEN
X-MS-TOKEN-FACEBOOK-EXPIRES-ON
Google X-MS-TOKEN-GOOGLE-ID-TOKEN
X-MS-TOKEN-GOOGLE-ACCESS-TOKEN
X-MS-TOKEN-GOOGLE-EXPIRES-ON
X-MS-TOKEN-GOOGLE-REFRESH-TOKEN
X X-MS-TOKEN-TWITTER-ACCESS-TOKEN
X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET

Nota

Los distintos marcos de lenguaje pueden presentar estos encabezados al código de la aplicación en formatos diferentes, como en minúsculas o con el tipo título.

Desde el código de cliente (por ejemplo, una aplicación móvil o JavaScript en el explorador), envíe la solicitud GET HTTP a /.auth/me (el almacén de tokens debe estar habilitado). El JSON devuelto tiene los tokens específicos del proveedor.

Nota

Los tokens de acceso son para acceder a los recursos del proveedor, por lo que solo están presentes si configura el proveedor con un secreto de cliente.

Actualización de tokens de autenticación

Cuando el token de acceso de su proveedor (no el token de sesión) expire, debe volver a autenticar al usuario antes de volver a usar ese token. Puede evitar la expiración del token mediante la realización de una llamada GET al punto de conexión /.auth/refresh de la aplicación. Cuando se llama, App Service actualiza automáticamente los tokens de acceso en el almacén de tokens para el usuario autenticado. Las solicitudes posteriores para los tokens por código de aplicación obtienen los tokens actualizados. Sin embargo, para que la actualización de token funcione, el almacén de tokens debe contener tokens de actualización para el proveedor. Cada proveedor documenta la manera de obtener tokens de actualización, pero la siguiente lista es un breve resumen:

Una vez configurado el proveedor, puede encontrar el token de actualización y la hora de expiración del token de acceso en el almacén de tokens.

Para actualizar el token de acceso en cualquier momento, llame a /.auth/refresh en cualquier idioma. El fragmento de código siguiente utiliza jQuery para actualizar los tokens de acceso de un cliente de JavaScript.

function refreshTokens() {
  let refreshUrl = "/.auth/refresh";
  $.ajax(refreshUrl) .done(function() {
    console.log("Token refresh completed successfully.");
  }) .fail(function() {
    console.log("Token refresh failed. See application logs for details.");
  });
}

Si un usuario revoca los permisos concedidos a la aplicación, la llamada a /.auth/me podría producir un error con una respuesta de 403 Forbidden. Para diagnosticar errores, compruebe los registros de aplicación para más detalles.

Ampliación del período de gracia de expiración del token de sesión

La sesión autenticada expira después de 8 horas. Después de que una sesión autenticada expire, un período de gracia de 72 horas sigue de manera predeterminada. Dentro de este período de gracia, puede actualizar el token de sesión con App Service sin volver a autenticar al usuario. Simplemente puede llamar a /.auth/refresh cuando el token de sesión deje de ser válido y no es necesario que realice un seguimiento usted mismo de la expiración del token. Cuando expire el período de gracia de 72 horas, el usuario debe iniciar sesión de nuevo para obtener un token de sesión válido.

Si 72 horas no es tiempo suficiente para usted, puede ampliar este período de expiración. Extender la expiración durante un período prolongado podría tener implicaciones de seguridad importantes (por ejemplo, cuando un token de autenticación se pierde o roba). Se recomienda dejar la configuración en las 72 horas predeterminadas o establecer el período de extensión en el valor más pequeño.

Para ampliar la ventana de expiración predeterminada, ejecute el siguiente comando en Azure Cloud Shell.

az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>

Nota

El período de gracia solo se aplica a la sesión autenticada de App Service, no a los tokens de los proveedores de identidades. No existe ningún período de gracia para los tokens de proveedor expirados.