【问题标题】:how would authentication be done in OAuth2 without OIDC?在没有 OIDC 的情况下如何在 OAuth2 中进行身份验证?
【发布时间】:2020-01-12 08:06:27
【问题描述】:

我知道有很多关于这一点的材料,但我还是不太明白。

我知道 OAuth2 不适用于身份验证,并且您需要在顶部使用 OIDC 才能进行身份验证。

但还是不太明白为什么。

如果我查看隐式流程,其中一个步骤是用户向授权服务器进行身份验证,然后颁发访问令牌。

这是身份验证,不是吗?

那么为什么我们还需要 OIDC 和 ID 令牌呢?是不是因为访问令牌本身不够用,而 JWT 确保用户稍后可以通过后端服务进行身份验证?

如果您只有 OAuth2 而没有 OIDC,您将如何进行身份验证?

【问题讨论】:

    标签: oauth-2.0 openid-connect


    【解决方案1】:

    披露:我为 Ping Identity 工作。

    我写了一篇关于 OpenID Connect 为什么在 OAuth 2.0 之上有用的博客,我认为它会在这里有所帮助。

    https://developer.pingidentity.com/en/blog/posts/2019/oidc-adds-authentication.html

    基本上,OAuth 2.0 框架为客户端提供了一种请求授权服务器去获取资源所有者授权的方法。

    即,客户端对授权服务器说,“我需要访问 John 拥有的受保护资源,你能去请求 John 授权此访问吗?”然后,授权服务器可以执行此操作并返回客户端的访问令牌以访问受保护的资源。

    但是,如果客户问:“我怎么知道实际上是 John 提供了授权?” OAuth 2.0 框架没有给出回答这个问题的方法。

    除了访问令牌之外,OpenID Connect 还提供额外的 ID 令牌,客户端可以检查它是否是 John。

    【讨论】:

    • 感谢您的回复!所以基本上使用 OAuth2 涉及身份验证,但仅在资源所有者和授权服务器之间,客户端无法确保此身份验证实际有效。只有在访问令牌(ID 令牌)中添加了某些信息时,客户端才能确定资源所有者确实已经过身份验证。那么 OIDC 并没有真正添加认证,而是通过 ID 令牌的方式将认证过程的信息转发给客户端?
    • 据此:oauthlib.readthedocs.io/en/latest/oauth2/grants/implicit.html 隐式授权类型的步骤之一是“授权服务器验证资源所有者(通过用户代理)并确定资源所有者是授予还是拒绝客户的访问请求。”因此,即使没有 OIDC,也有一个身份验证步骤。还是我错过了什么?
    • OAuth 2.0 规范没有规定任何处理您所说的身份验证的方法。更多的是,“嘿,你应该在这里进行身份验证。”它没有描述应该如何完成,或者关于身份验证和用户的信息如何传递。 OIDC 对此进行了补充,并表示:“好的,这就是我们将如何处理身份验证并将成功的身份验证传递给客户端的方式。”
    • 因此,如果没有 OIDC,我们将不得不提出自己的身份验证方式和传递此信息的方式。
    • 是的,ID Token 是 OAuth 缺少的 OIDC 的主要补充之一
    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2018-10-26
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多