【问题标题】:How does OAuth2.0 implements authorization?OAuth2.0如何实现授权?
【发布时间】:2020-04-13 00:58:22
【问题描述】:

我现在正在研究该主题,据我了解,OAuth 2.0 应该是 Web 服务器中用户授权的协议。当涉及到身份验证时,它非常简单 - 客户端向身份提供者发送请求,接收包含附加信息的令牌(例如 JWT),然后他将该令牌发送到应用服务器,应用服务器使用验证令牌身份提供者。一切都很好,直到这里。

我的问题是授权 - 知道用户在应用服务器中拥有哪些权限。据我了解,请求的“范围”部分是指用户允许应用服务器在身份提供者中对其实体执行的操作,因此它是授权但它仅授权应用服务器。
该协议是否包含应用服务器授权客户端的任何方式,或者它假设每个用户的角色和范围等数据将由应用服务器管理?我猜这样的数据可以由身份提供者在令牌上发送,但是每个用户的权限是如何通过身份提供者管理的呢?它是协议的一部分吗?如果不是,为什么叫“授权协议”?

【问题讨论】:

    标签: authentication oauth-2.0 authorization


    【解决方案1】:

    OAuth2 的目的是允许客户端应用程序代表用户调用 API 服务器。范围定义客户端应用程序可以对 API 服务器上的用户数据执行什么操作。这称为委托授权,因为用户将一些权限委托给客户端应用程序。

    现在,一些授权服务器允许您为资源服务器定义角色,并将这些角色作为声明包含在访问令牌中。如何解释这些角色是授权服务器和资源服务器之间的隐含契约。角色不是OAuth2 RFC 的一部分。

    【讨论】:

    • 谢谢,现在我只是对为什么这在网上很多地方都被称为“授权”感到困惑,但这就是我们的问题。
    【解决方案2】:

    除了 MvdD 所说的,授权意味着用户授予客户端应用程序对该用户拥有的受保护资源的一些访问权限。

    当用户被发送到授权服务器进行身份验证时,授权服务器应该询问类似“您允许此客户端应用程序访问您的受保护资源吗?”这样的问题。有时您会看到“X 应用程序想要查看您的电子邮件、地址、电话号码……”

    范围指定允许的操作。允许客户端应用访问受保护资源的访问令牌。资源服务器应该只允许与访问令牌中的范围关联的操作。

    【讨论】:

    • 据我了解,并非如此。假设我使用 Facebook 登录 Github。 Github 从 Facebook 获取我的身份,但它需要自己管理我对哪些存储库拥有哪些权限。我看不出我授予 Github 使用我的 Facebook 帐户、IE 范围做事的权限与此有什么关系。 Facebook 对用户进行身份验证,然后 Github 处理他的授权。可能是我弄错了,那种情况下我不懂授权机制。
    • 如果您使用 Facebook 在 Github 上注册帐户,这些权限可能会执行一些操作,例如从 Facebook 提取您的名字和地址以填充您的 Github 帐户。
    猜你喜欢
    • 2015-06-30
    • 2018-07-30
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2017-01-14
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多