¿Por qué usar OpenID Connect en lugar de OAuth2?

98

Acabo de comenzar a usar OAuth 2.0 como una forma de autenticar a mis usuarios. Funciona muy bien: solo uso la API de identidad / perfil de cada proveedor para obtener una dirección de correo electrónico validada del usuario.

Ahora leo sobre OpenID Connect y estoy un poco confundido.

¿Cuál es la diferencia entre OpenID Connect y el uso de la API de identidad sobre OAuth2? ¿Es solo que tengo una API de perfil estándar, para no tener que preocuparme si recibo "email" o "emails" JSON?

¿O hay algo más en eso, lo que hace que el enfoque de OpenID Connect sea más seguro que mi primer enfoque?

    
pregunta rdmueller 21.06.2013 - 08:18
fuente

6 respuestas

70

OpenID connect te dará un token de acceso más un token de identificación . El token de identificación es un JWT y contiene información sobre el usuario autenticado. Está firmado por el proveedor de identidad y se puede leer y verificar sin acceder al proveedor de identidad.

Además, OpenID connect estandariza bastantes cosas que auth2 deja a su elección. por ejemplo, ámbitos, descubrimiento de puntos finales y registro dinámico de clientes.

Esto facilita la escritura de código que permite al usuario elegir entre varios proveedores de identidad.

    
respondido por el flup 17.12.2013 - 04:33
fuente
25

OAuth solo proporciona y debería proporcionar autorización utilizando un token de acceso. OpenID connect se basa en OAuth 2 para proporcionar información de autenticación de usuario. Sin embargo, no le proporcionará una implementación más robusta que OAuth (ya que usa OAuth y agrega algunas interacciones adicionales con un proveedor de OpenID).

  

OpenID Connect 1.0 es una capa de identidad simple sobre el protocolo OAuth 2.0 [RFC6749]. Permite a los Clientes verificar la identidad del Usuario final basándose en la autenticación realizada por un Servidor de Autorización, así como obtener información básica de perfil sobre el Usuario Final de manera interoperable y similar a REST.     OpenID Connect Core 1.0 - draft 17

OpenID connect le proporciona una forma "estándar" de obtener la identidad del usuario. Si usa OAuth y la API, debe adaptar su solicitud para cada recurso, que puede que no siempre proporcione la misma información o que cambie con el tiempo. Y conceptualmente, utiliza OAuth para poder usar una API, no para autenticar a un usuario.

  

Como fondo, las especificaciones del Marco de Autorización OAuth 2.0 [RFC6749] y el Uso del token de portador OAuth 2.0 [RFC6750] proporcionan un marco general para que las aplicaciones de terceros obtengan y utilicen acceso limitado a los recursos HTTP. Definen los mecanismos para obtener y usar los tokens de acceso para acceder a los recursos, pero no definen los métodos estándar para proporcionar información de identidad. En particular, sin el perfil de OAuth 2.0, es incapaz de proporcionar información sobre la autenticación de un usuario final. OpenID Connect Core 1.0 - draft 17

Tenga en cuenta que OpenID connect proporciona un id_token con cierta información sobre el usuario. Sin embargo, si desea todo el conjunto de información, aún necesita el access_token para solicitar al proveedor de OpenID que obtenga la información del usuario (lo que me confundió la primera vez que lo vi). Eso muestra que la solicitud de información del usuario desde una API o desde el proveedor de OpenID usa casi el mismo método. Ver 5.3.1. userinfo request en el borrador.

    
respondido por el Nereis 21.01.2014 - 15:07
fuente
12

OAuth es un protocolo de autorización, que proporciona una manera de autorizar el acceso a un recurso protegido. Un subproducto del proceso de autorización es que el usuario está autenticado.

Técnicamente, OAuth no tiene que darle ninguna información sobre el usuario. Lo que proporciona es una validación de que el usuario ha otorgado autoridad a la aplicación para acceder a algunos datos. Esto se rige por el alcance de la concesión de autorización.

OpenID Connect proporciona una forma para que la aplicación recupere información sobre el usuario autenticado. Lo más importante es que proporciona un nivel de seguridad de que la información es válida (en lo que respecta al servidor de autorización de todos modos). Esto se puede usar para facilitar la federación de identidades.

En el pasado, la federación se lograba con OAuth al otorgar un alcance que permitía el acceso a la información de identidad del usuario. OpenID Connect estandariza ese alcance.

    
respondido por el Tim 26.02.2015 - 05:12
fuente
7

OpenID Connect es un perfil de OAuth2 ... que define una arquitectura que le permite a una persona autorizar a un proveedor de identidad para liberar ciertos reclamos de usuarios a un cliente (sitio web / aplicación móvil).

OAuth2 ofrece la concesión de credenciales de contraseña del propietario del recurso, que los expertos de IAM calumnian con razón como "El diablo".

Un patrón común para la API de OpenID Connect es tres pasos:
1) Obtener un código
2) Obtener tokens como access_token , refresh_token y id_token
3) Obtenga información del usuario que contiene reclamaciones como nombre de usuario, correo electrónico, etc.
El esquema para el id_token, que es un JWT, se define en el alcance de OpenID Connect, al igual que muchos otros detalles.

Otra razón para usar OpenID Connect es que existe una solución segura para la autenticación centralizada para software móvil (al menos IOS y Android). La mejor práctica actual definida por Google es usar nuevas funciones de seguridad que impiden que una aplicación móvil vea cookies o credenciales en una vista web. Google publicó las bibliotecas de AppAuth IOS y Android porque realmente no quieren que pierdas las credenciales de Google. En el momento de escribir este artículo, hay varios proveedores de OpenID (también conocidos como IDP ...) que admiten el software Google OpenID Connect AppAuth, incluidos: Google, OKTA, Ping y mi producto Gluu.

Véase también:

  • OAuth 2.0 para aplicaciones nativas draft-wdenniss-oauth-native-apps-02
  • AppAuth para iOS
  • AppAuth para Android
respondido por el Mike Schwartz 23.06.2016 - 21:02
fuente
3

No se recomienda utilizar OAuth como método de autenticación, está diseñado explícitamente como un método de autorización delegada.

Facebook estaba usando OAuth como método de autenticación, pero una persona emprendedora descubrió cómo robar el access_token de Facebook - entrada completa del blog

OpenID Connect hace que sea mucho más difícil robar tokens de acceso a través de dicho mecanismo.

    
respondido por el Alex White 24.12.2015 - 12:32
fuente
1

Open id connect se construye en la parte superior de OAuth y, por lo tanto, es más robusto. OAuth es el protocolo que se usa solo para la autorización y open id connect es muy similar a OAuth, pero combina la característica de OAuth también. Puede iniciar la comunicación entre sus RP y sus IP utilizando este protocolo y existen varios orificios de bucle en el protocolo OAuth, por eso es mejor usar Open Id Connect.

    
respondido por el Utsav 11.10.2013 - 15:52
fuente

Lea otras preguntas en las etiquetas