使用 JWT 联合身份的 REST 身份验证/授权
Posted
技术标签:
【中文标题】使用 JWT 联合身份的 REST 身份验证/授权【英文标题】:REST authentication / authorization using JWT federated identities 【发布时间】:2013-04-17 00:13:06 【问题描述】:我正在考虑开发一个使用 REST 公开服务的应用程序。这些服务将通过浏览器和非浏览器客户端访问。我预计会有许多由不同团体拥有和管理的软件安装。我想让一个系统的用户能够访问另一个系统上的服务。它们不会共享相同的身份存储。我希望用户可以对其实例进行身份验证,然后使用令牌向其实例和远程实例发出请求。这似乎是 JSON Web Tokens (JWT) 的一个很好的用途。每个系统都需要配置为相互信任由证书签名的令牌。
我已经读到这可以使用带有 JWT 不记名令牌的 OAuth 来完成,但这似乎比需要的开销更大。为什么将不记名令牌交换为访问令牌而不是仅使用不记名令牌?我质疑 OAuth 是否合适,因为它不是控制系统是否可以访问用户的数据,就像网络上的许多示例一样,而是用户是否可以访问存储在系统中的数据。
问题的下一部分是确定如何创建这些 JWT 令牌,看起来像 WS-Trust STS 这样的东西是合适的。我还没有看到任何简单的,只是验证用户并返回令牌。如果还支持延长令牌的过期时间和验证令牌,可能会有用吗?
在过去,我能够使用带有 WS-Security 和 SAML 断言的 SOAP 来启用这种类型的功能。我想看看是否可以使用 REST 和 JWT 令牌来完成相同的操作。网上有很多帖子建议不要使用自己的安全框架,所以我有点犹豫要不要继续前进。我看到微软添加了处理程序来保护使用 JWT 令牌的服务,所以他们似乎看到了这种方法的一些价值。
有没有人了解如何以符合标准且简单的方式为 REST 服务完成这种身份联合?
【问题讨论】:
【参考方案1】:是的,这是我向客户推荐的方法。事实上,JWT 是 Windows Azure 移动服务保护其端点的方式。 JWT 处理起来相对简单(例如与 SAML 令牌相比),但与 access_tokens
相比保留了一些有趣的属性(例如具有签名)。
This doc 展示了如何使用 WebApi 和我们的产品(如果您使用的是 MS 技术)进行此操作的示例。不过,这些原则是通用的,无论您是否使用我们的 STS,您都可以应用。
【讨论】:
以上是关于使用 JWT 联合身份的 REST 身份验证/授权的主要内容,如果未能解决你的问题,请参考以下文章
自定义 Django Rest Framework 身份验证验证何时返回“无”
Docusign REST API:使用 Microsoft Flow 的 JWT Grant 实现 OAuth 身份验证