身份validation和资源服务器之间的OAuth v2通信

我在理解OAUTH-v2如何工作方面遇到一些麻烦。

OAuth版本2规范显示:

  1. 访问受保护的资源

    客户端通过访问来访问受保护的资源
    令牌给资源服务器。 资源服务器必须validation
    访问令牌并确保它没有过期,并且其范围覆盖
    请求的资源。 资源服务器使用的方法
    validation访问令牌(以及任何错误响应) 超出了本规范的范围 ,但通常涉及资源服务器和授权之间的交互或协调
    服务器

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

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

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

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

这是超出规范范围的原因是两个实体之间完成这种连接的各种方法。 主要问题是您的部署有多复杂。

例如,您是否有一台pipe理身份validation和访问的服务器,以及一组独立的服务,每台服务器都有自己的服务器来提供API调用? 或者,您是否只有一个包含一个Web服务器的盒子,可同时处理authentication/授权和API调用?

在单个盒子的情况下,由于发行令牌的实体与validation它们的实体相同,因此不需要太多。 您可以实现令牌以使用数据库表键,并在每个请求中查找数据库(或内存高速caching)中的logging,也可以将范围,用户标识和其他信息直接编码到令牌中,并使用对称或非对称algorithm。

在处理分布式环境时,事情会变得复杂一些,但不是太多。 您仍然在授权服务器上发出令牌,但资源服务器需要validation这些令牌的方法。 它可以通过使内部API可用于资源服务器来请求授权服务器“parsing”令牌(在本地环境中可以是快速的),或者两者可以build立公钥/私钥对或对称秘密并使用它将资源服务器需要的所有内容encryption到令牌中。

自包含的令牌比较长,但是按请求提供更好的性能。 然而,他们有一个价格 – 你不能真正撤销他们仍然有效(没有过期)。 因为这个原因,自包含的令牌应该是非常短暂的(任何被允许在被撤销之后允许访问的东西都是可以接受的 – 例如许多站点使用一个小时),并且刷新令牌可以使用一年或者更多的时间来获得新的令牌。

资源授权服务器API的一个示例是Google Developers网站上的一个例子。
它虽然没有指定访问令牌的格式,但是这个回应看起来相当普遍有用。