oauth-2.0 - introspectionclient - userinfoclient
IdentityServer Flows (4)
IdentityServer admite diferentes flujos de OpenId Connect definidos en la enumeración de Flows y configurados para clientes. También hay muestras para cada tipo de flujo y muchas referencias a ellos en los documentos, pero no pude encontrar una lista de definición simple de qué flujos están en la documentation como si fueran demasiado obvios para explicar en palabras. Pero supongo que no lo son. ¿Puede contarnos más sobre las diferencias de estos, tal vez podamos agregar eso a los documentos?
Entonces, ¿qué son: flujo implícito , flujo de credenciales de contraseña del propietario del recurso , flujo de código de autorización, flujo de credenciales de cliente , flujo de concesión personalizado y flujo híbrido ? ¿Cuáles son los flujos de OAuth y cuáles son los flujos de OpenID Connect?
¡Gracias!
Los flujos definidos en
OAuth2
son solo varias formas para que un cliente reciba un
access token
de un servidor de proveedor de identidad;
IdentityServer
en este caso.
Comprender los flujos no será fácil a menos que comprenda completamente las entidades especificadas en
los diagramas de flujo
, como el
Resource Owner
, el
User Agent
y el
Resource Server
.
Aquí hay algunas explicaciones breves sobre estas entidades (roles, preciosamente).
Flujo de código de autorización
: emite un
authorization code
antes de emitir un
access token
.
-
Un cliente solicita un
authorization code.
-
IdentityServer
Valida al cliente y le pide al propietario del recurso que otorgue la autorización para emitir un
authorization code
. -
Luego, el cliente solicita un
access token
con elauthorization code
proporcionado -
El servidor de autorización
emite un
access token
directamente al cliente.
Flujo de código implícito
: emite un
access token
incluso sin
authorization code
proporcionado.
-
Un cliente solicita un
access token
directamente. -
IdentityServer
omite validar al cliente (en algunos escenarios, lo hace parcialmente) pero aún así le pide al propietario del recurso que otorgue la autorización para emitir un
access token
-
Este flujo nunca emite un
authorization code
.
El flujo implícito
se considera el flujo ideal para un cliente que usa lenguajes de script como
javascript
ya que el cliente no tiene que solicitar un
authorization code
y un
access token
separado, lo que a su vez reduce un viaje de ida y vuelta de red para el cliente.
Flujo de credenciales del cliente
: emite un
access token
sin el permiso del propietario del recurso.
- Un cliente solicita un token de acceso directamente.
-
IdentityServer
valida al cliente y emite un
access token
inmediato.
Esto es ideal cuando el cliente también es propietario de un recurso, por lo que no necesita ningún permiso de autorización hasta el
access token
.
Flujo del propietario del recurso
: emite un
access token
si un cliente tiene las credenciales del propietario del recurso (por ejemplo, Id / Contraseña)
-
Un cliente solicita un
access token
directamente. - IdentityServer valida al cliente y verifica la identidad del propietario del recurso.
-
Si es válido, el cliente obtiene el
access token
instante.
Este flujo es ideal para los clientes que crees que es absolutamente seguro compartir con ellos los identificadores y las contraseñas.
Flujo híbrido (flujo OIDC)
: emite un
authorization code
y un
access token
.
Esta es una combinación de
Authorization code flow
de
Authorization code flow
y
Implicit code flow
.
Por eso se llama
Hybrid
.
Flujo personalizado
Este es literalmente un flujo personalizable.
Esto se puede usar cuando necesita un proceso de autenticación / validación específico en su negocio además de todas las especificaciones de protocolo en
OAuth2
.
IdentityServer es muy consciente de este tipo de situación y admite extensibilidades por diseño. El patrón de fábrica, el patrón de decorador y IoC / DI le facilitarán la implementación de funciones adicionales en su IdentityServer .
Me enfrenté al mismo problema, actualmente el trabajo aún está en progreso. cuando termine la documentación, podría publicarla aquí. por el momento: verifique el borrador:
Enriquezca la documentación de IdentityServer con OIDC y OAuth2 Flows sección # 73
Actualización: flujos OIDC y OAuth2
vea las especificaciones: ya se ha escrito todo:
http://openid.net/specs/openid-connect-core-1_0.html y http://tools.ietf.org/html/rfc6749
Además, recientemente escribí un resumen que lo desglosa para diferentes tipos de aplicaciones:
http://leastprivilege.com/2016/01/17/which-openid-connectoauth-2-o-flow-is-the-right-one/
Desde el primer enlace de privilegio: y OAuth 2 de Aharon Paretzki simplificado
Los flujos deciden cómo se devuelven al cliente el token de ID (es decir, el código de autorización) y el token de acceso (es decir, ''el token''):
Flujo de código de autorización : flujo OAuth 2.0 en el que
- se devuelve un código de autorización desde el punto final de autorización
- y todos los tokens (como segunda etapa, a cambio del código de autorización) se devuelven desde el Punto final del token
- Se utiliza para llamadas basadas en servidor (API) que pueden mantener la confidencialidad de su secreto de cliente. Permite una mayor seguridad, siempre y cuando nadie pueda acceder al "secreto del cliente".
Flujo implícito : flujo OAuth 2.0 en el que
- todos los tokens se devuelven directamente desde el punto final de autorización
- y no se utilizan ni el token Endpoint ni un código de autorización.
- Se utiliza para aplicaciones móviles y basadas en web, que no pueden mantener la confidencialidad del secreto del cliente, por lo que es necesario que el token sea emitido por el servidor de autenticación. Esto es menos seguro y se recomienda que el servidor se configure para denegar llamadas de flujo implícito para el uso de API y permitirlo solo para las aplicaciones basadas en navegador y móviles.
Flujo híbrido : flujo OAuth 2.0 en el que
- se devuelve un Código de autorización desde el Punto final de autorización,
- algunos tokens se devuelven directamente desde el Punto final de autorización y otros se devuelven (como segunda etapa, a cambio del código de autorización) desde el Punto final de token.
- Se usa donde se necesitan ambos flujos.