OAuth v2认证服务器和资源服务器之间的通信

88

我有些困惑如何使用OAUTH-v2。

OAuth version 2规范中写道:

  1. 访问受保护的资源

    客户端通过向资源服务器提供访问令牌来访问受保护的资源。 资源服务器必须验证访问令牌并确保其未过期,并且其范围包括所请求的资源。 用于验证访问令牌的方法(以及任何错误响应)超出了此规范的范围,但通常涉及资源服务器与授权服务器之间的交互或协调

在实践中,资源服务器和授权服务器之间的这种交互是如何工作的呢?

  • 资源服务器如何确定收到的访问令牌是否有效?
  • 资源服务器如何从令牌中提取允许的范围以查看是否应该将访问权限授予特定资源? 范围是否编码在访问令牌中,还是资源服务器首先要联系授权服务器?
  • 资源服务器和授权服务器之间如何建立信任关系?

访问令牌属性和访问受保护资源的方法超出了此规范的范围,并由配套规范定义。

有人可以给出访问令牌属性的例子吗?


1
这确实是我几天来一直在寻找的问题。 - Techiemanu
2个回答

84
这个规范不包含连接这两个实体的方法,是因为有许多方式可以完成这个连接。 主要问题是您的部署有多复杂。
例如,您是否有一个服务器管理认证和访问,并带有一组离散服务,每个服务都有自己的服务器提供API调用? 还是,您只有一台服务器,一个 Web 服务器处理身份验证/授权和 API 调用?
对于单个服务器,不需要太多东西,因为发出令牌的实体与验证它们的实体相同。 您可以使用数据库表键来实现令牌,并在每个请求上查找数据库中的记录(或内存缓存),或者您可以直接将作用域、用户 ID 和其他信息编码到令牌中,并使用对称或非对称算法加密。
当处理分布式环境时,会变得有点复杂,但并不多。 您仍然需要在授权服务器上发出令牌,但资源服务器需要一种验证这些令牌的方法。 它可以通过使内部 API 可用于资源服务器来向授权服务器“解析”令牌(在本地环境中可能很快),或者两个服务器可以建立公共/私有密钥对或对称密钥,并使用它来加密资源服务器所需的所有内容到令牌中。
自包含令牌长度较长,但每个请求的性能更好。 但是,它们的价格比较高-在它们仍然有效(未过期)时,您无法真正撤销它们。 因此,自包含令牌应该非常短寿命(可接受您在吊销访问权限后留下多长时间-例如,许多站点使用一小时),并具有一年或更长时间的刷新令牌以获得新令牌。

如果发行和验证令牌的实体没有静态的白色/公共IP,那么服务提供商回调客户端/资源所有者就无法通过HTTP(s)完成,因此需要一些更为复杂的实现,这是真的吗? - Denys S.
回调不是由服务提供商执行,而是由用户的浏览器执行。不确定您具体在问什么。 - Eran Hammer
如果您添加了一些资源服务器使用的API(属于您的API),会发生什么情况?那么,您是否应该使用OAuth2身份验证(client_credentials)与资源服务器建立安全的机器对机器通信?在这种情况下,是否意味着所有API都必须与授权服务器共享相同的密钥对? - Dionisis K

4

资源服务器和授权服务器API的一个例子是在Google开发者网站上提供的API。虽然它没有指定访问令牌的格式,但响应似乎非常通用。


OIDC和id_tokens与不透明访问令牌是不同的东西。 - machete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接