Autorización en la aplicación OAuth2 que es cliente y servidor de recursos

2

Estoy tratando de entender cómo una aplicación que usa el servidor OAuth2 (OIDC) implementaría el control de acceso a sus propios recursos.
En este caso, la aplicación es 'Cliente' y 'Servidor de recursos' en términos de OAuth2.

Entonces, el usuario, desde el navegador, accede a la aplicación y está siendo redirigido al servidor OIDC donde se autentica, después de lo cual el servidor OIDC envía access_token y id_token a la aplicación (no para el navegador del usuario, suponga que la aplicación es cliente "confidencial" en términos de OAuth2).
Supongo que este access_token podría emitirse con derechos de acceso a la aplicación (que ahora actúa como un 'Servidor de recursos'), que podrían usarse para controlar el acceso a los recursos de la aplicación para el usuario. Pero, ¿cómo podría el usuario enviar este access_token a la aplicación (actuando como un 'Servidor de recursos') ya que el usuario no obtuvo este token (solo se comparte con la aplicación)?

¿Es posible que este access_token se use para crear algún tipo de sesión de "acceso" entre el navegador del usuario y la aplicación, similar a la forma en que id_token se usa para construir sesión de autenticación en forma de una cookie? O, ¿se utiliza la sesión de autenticación para obtener access_token del servidor OIDC cada vez que un usuario accede a un recurso diferente en la aplicación, el usuario no está al tanto de esta comunicación, ya que no se le solicita su consentimiento?

¿O me estoy equivocando por completo?

Mi caso: supongamos que tenemos una aplicación web que tiene backend y frontend, pero el frontend NO se está implementando como un SPA (en cuyo caso actuaría como un 'Cliente'). El token todavía se comparte entre el backend y el AS (no pasa por el navegador). ¿Cómo mi aplicación controla el acceso a sus recursos? Por ejemplo, el usuario puede ver la página de inicio, pero no un portal de administración.

Por favor, no base sus respuestas en mi caso de uso concreto, trate de responder en general.

    
pregunta Mike 26.07.2018 - 17:57
fuente

1 respuesta

2

Creo que su aplicación tiene una arquitectura similar a la que se muestra en la siguiente imagen,

Laaplicacióntieneunextremofrontalqueseejecutaenelnavegadorytieneunback-end.Elservidordeautorizaciónestáexternalizado(fueradellímitedelaaplicación).Porlotanto,suaplicacióntieneunback-endquepuedehacerquelaaplicaciónseaunclienteconfidencial.EliniciodesesiónalaaplicaciónserealizaatravésdelflujoOIDC.Elnavegadorredirigealusuarioalapáginadeiniciodesesióndelservidordeautorización.Él/ellaproporcionalascredenciales,elservidordevuelveuncódigodeautorizaciónysepasaalback-end,loquepermitequeelback-endrealicelasolicituddeltoken.

Unaopciónqueveoaquíescrearunasesiónautenticadaentreelnavegadoryelservidorderecursos.Laconexiónverdeenmidiagramarepresentaestasesión.Laautentificacióndeestasesiónsignificaqueestáobligadoaaccederaltoken.Eltiempodeesperadelasesiónsedefineporlacaducidaddeltokendeacceso.Estorequeriráalgodelógicadesdeelfront-end,asícomoelservidorderecursos.

Otraopciónespasareltokendeaccesoalextremodelantero.Conesto,noesnecesariomantenerunasesión,peroelfront-endrequiereprotegereltokendeaccesoyenviarloconcadasolicitudrealizadaalback-end.Porlotanto,lalíneadeconexiónverdeahorasignificaconexióndeconfianzadetokendeportador(consulte RFC6750 para ver la forma estándar de transmitir token de acceso sobre encabezados )

Con respecto a los derechos de acceso (consentimiento), esto dependerá únicamente del contexto de su aplicación. Si desea que OIDC externalice los inicios de sesión de usuarios, los directorios de usuarios y los mecanismos de autenticación, entonces no veo el requisito de preocuparse mucho por esto. Lo que necesita un token de acceso (y un token de ID).

    
respondido por el Kavindu Dodanduwa 27.07.2018 - 07:38
fuente

Lea otras preguntas en las etiquetas