OAuth se diseñó para casos en los que la Aplicación X necesita acceso a recursos (por ejemplo, "mis fotos" o "mi dirección de correo electrónico" o "mi calendario") controlados por la Aplicación Y y que pertenecen al Usuario A: el Usuario A puede querer conceder acceso a esos recursos en la Aplicación Y, pero él no quiere dar a la Aplicación X sus credenciales de nombre de usuario / contraseña reales. Por lo tanto, un token de acceso se usa como una credencial alternativa para un recurso en la Aplicación Y. Los tokens de acceso pueden ser revocados independientemente de las credenciales de nombre de usuario / contraseña y, idealmente, tienen un ámbito estricto para permitir solo el acceso a recursos específicos.
El uso de OAuth 2 para las sobrecargas de autenticación que modelan de manera que puede ser riesgoso. Mire el ejemplo anterior e imagine que se usa para la autenticación. Si la Aplicación X usa ese token de acceso para la autenticación, entonces toma un token que otorga acceso a los recursos en la Aplicación Y y lo usa para otorgar acceso a sus propios recursos. Tal vez sea la división de los pelos, porque lo importante es que sabemos que el hecho de otorgar un token de acceso a través de OAuth 2 implica que el usuario se ha autenticado correctamente. El problema es que el token de acceso no dice nada sobre la aplicación que el usuario final autenticó para . Entonces, ¿qué sucede si la aplicación Z también tiene un token de acceso para los recursos del usuario A en la aplicación Y? Si la Aplicación Z puede obtener la Aplicación X para usar este token de acceso, entonces tiene acceso a los recursos del Usuario A en la Aplicación X . Eso es malo. El Usuario A puede haber confiado en la Aplicación Z para acceder a sus recursos en la Aplicación Y, pero el Usuario A ciertamente nunca otorgó el consentimiento para que la Aplicación Z acceda a sus recursos en la Aplicación X.
OpenID y OpenID Connect están diseñados específicamente para la autenticación. OpenID Connect se construye sobre OAuth 2 para poder aprovechar las interacciones y flujos existentes, pero agrega una entidad llamada un token de identificación, que es un objeto que contiene un conjunto de notificaciones sobre un evento de autenticación. Esas reclamaciones incluyen un identificador para el usuario que realizó la autenticación, un identificador para el servidor que manejó la autenticación y un identificador de la audiencia de la autenticación. Esto le da a la aplicación la información que necesita para validar que un usuario está autenticado en su nombre.