我最近一直在研究 OAuth2,我想我了解授权过程。
但是,我似乎不明白的是,一旦进行了授权并建立了 anaccess_token
和 arefresh_token
来进行调用,如何根据access_token
请求是否可以访问特定资源来做出决定?
即令牌被发送到服务器以请求照片。服务器上的逻辑如何根据给定的令牌确定允许或拒绝访问该特定照片?
我最近一直在研究 OAuth2,我想我了解授权过程。
但是,我似乎不明白的是,一旦进行了授权并建立了 anaccess_token
和 arefresh_token
来进行调用,如何根据access_token
请求是否可以访问特定资源来做出决定?
即令牌被发送到服务器以请求照片。服务器上的逻辑如何根据给定的令牌确定允许或拒绝访问该特定照片?
访问令牌实际上是一个加密对象,该对象定义了范围并可以重新建立授权。
想象一下服务提供商给你一个 HMAC 加密令牌,这对你来说毫无意义,但端点知道如何解密它。在解密时,它会有如下信息:
{"scope":"Photos", "userID":"3refefe"}
因此,基本上处理令牌的模块会加密这个 JSON(或任何其他格式)对象并为您提供加密的令牌。当您点击 API 端点时,它会将令牌发送到解密逻辑并获取此 JSON 对象,从而知道您被授权做什么。
此对象可以包含任何类型的信息和任何格式,具体取决于服务提供商。我已经在这里描述了 OAuth 提供者是如何工作的。
这应该解释了极简主义 OAuth 框架的基础知识。
access_token
通常是不透明的伪影。没有任何内在的东西可以将其与资源(例如特定照片)相关联。当授权流程开始时,您通常会请求一个scope
定义您需要的访问权限的特定内容。如果资源的所有者同意此访问,则请求成功。用户也可以撤销访问权限。
所有这些都是应用程序特定的代码。每个应用程序都定义了它们的范围以及它们如何执行检查。
您可能想以Authorization Server为例进行探索。