OAuth2 不用于身份验证

OAuth2 not for authentication

OAuth2 不足以进行身份​​验证的主要原因是什么?

我可以看到,如果用户 A 登录 evil.com,那么 evil.com 的所有者可以将用户 A 的 access_token 提交给 good.com(或任何其他使用 fb 网站登录)并假装是 userA.

但是如果 good.com 检查访问令牌是否适用于它,那么我看不到任何攻击的可能性..

我看不出有什么好大惊小怪的。例如,当我获得 access_token 详细信息时,facebook 会给我应用程序 ID。如果我检查这个,怎么可能发生攻击?

难道不是安全漏洞而是缺乏标准?比如电子邮件在哪个范围或哪个字段等?

您收到的访问令牌只是代表向客户端发出的授权。它只允许客户端访问受保护的资源,但不会向您提供有关资源所有者的任何信息。

在你的例子中,evil.com可以获得拥有userA的那些资源,但无法知道userA是谁。

请查看 this excellent video 关于 OAuth2 和 Authorization/Authentication 条款。对我帮助很大。

访问令牌确实为您提供了有关资源所有者的(可能)信息,但它没有为您提供有关资源所有者是否存在的信息and/or如何he/she进行身份验证,即使您d 能够以某种未定义的非标准方式识别令牌是否适合您(正如 OP 已经提到的那样,后者是 OpenID Connect 相对于 OAuth 2.0 的另一个优势)。