Consentimiento del usuario y aplicaciones de terceros
Aprenda cómo Auth0 gestiona el consentimiento del usuario cuando las aplicaciones solicitan acceso a las API en nombre del usuario.
OAuth permite que las aplicaciones accedan a las API en nombre del usuario. Antes de que una aplicación pueda actuar en nombre de un usuario, este debe aprobar explícitamente los permisos solicitados. Este paso de aprobación se conoce como consentimiento del usuario.Para las aplicaciones de terceros, el consentimiento del usuario siempre es obligatorio. El usuario debe aprobar cada solicitud de autorización. En las aplicaciones de primera parte, el consentimiento se puede omitir si así se configura, porque controla la aplicación y confía en que actuará de forma adecuada.
Cuando una aplicación de terceros redirige a un usuario al endpoint /authorize y solicita acceso a una API, Auth0 muestra un cuadro de diálogo de consentimiento en el que se enumeran los permisos que solicita la aplicación.La siguiente solicitud de autorización muestra un cuadro de diálogo de consentimiento en el que se pide al usuario que apruebe los permisos read:posts y write:posts para la API:
Si el usuario lo aprueba, Auth0 crea una concesión de usuario que representa su consentimiento para esta combinación de aplicación, API y alcances solicitados. La aplicación recibe un código de autorización como es habitual.Una vez otorgado el consentimiento, el usuario no vuelve a ver el cuadro de diálogo de consentimiento en los inicios de sesión posteriores hasta que se revoque explícitamente.
Las aplicaciones de terceros con controles de seguridad mejorados no admiten alcances de OIDC (openid, profile, email) en esta versión. El cuadro de diálogo de consentimiento muestra solo los alcances de la API. La compatibilidad con OIDC para aplicaciones de terceros está prevista para una versión futura.
De forma predeterminada, la página de consentimiento usa nombres de alcances para solicitar el consentimiento del usuario. Como se muestra a continuación, defina los alcances con el formato action:resource_name para que se muestren claramente:
La página de consentimiento agrupa los alcances de la misma API y muestra todas las acciones en una sola línea. Por ejemplo, la configuración anterior da como resultado Posts: read and write your posts.Para mostrar el campo Description en lugar del nombre del scope, establezca en true la marca use_scope_descriptions_for_consent del inquilino:Esta configuración afecta a las pantallas de consentimiento de todas las API del inquilino.
Cuando un usuario rechaza el consentimiento, el comportamiento depende de la política de redirección de la aplicación:
open_redirect_protection (valor predeterminado para aplicaciones de terceros): Auth0 muestra una página de error en lugar de redirigir. Esto evita los ataques de redirección abierta.
allow_always: Auth0 redirige a la redirect_uri con un error access_denied:
Omitir el consentimiento para aplicaciones de primera parte
Las aplicaciones de primera parte pueden omitir el cuadro de diálogo de consentimiento cuando la API tiene habilitada la opción Allow Skipping User Consent.Para acceder al interruptor Allow Skipping User Consent, seleccione Applications > APIs > (select the API) > Settings > Access Settings.Las aplicaciones de terceros siempre requieren consentimiento y no pueden omitir el cuadro de diálogo de consentimiento.
Incluso cuando se omite el consentimiento para las aplicaciones de primera parte, es posible que siga apareciendo una pantalla de confirmación de inicio de sesión cuando la aplicación usa un URI de devolución de llamada no verificable (como localhost o un esquema de URI personalizado). Esto protege a los usuarios contra la suplantación de aplicaciones en el mismo dispositivo. Para obtener más información, consulte Medidas contra la suplantación de identidad de aplicaciones.
Al usar el flujo de contraseña del propietario del recurso, no se muestra ningún cuadro de diálogo de consentimiento, ya que el usuario proporciona directamente su contraseña a la aplicación, lo que equivale a concederle acceso completo a su cuenta.
Para obligar a los usuarios a dar su consentimiento en cada inicio de sesión (incluso si ya tienen una concesión existente), incluye prompt=consent en la solicitud a /authorize: