使用JWT联合身份的REST身份验证/授权

Jam*_*mes 6 rest identity federation jwt

我正在研究开发一个使用REST公开服务的应用程序.这些服务将通过浏览器和非浏览器客户端访问.我希望这个软件的安装会由不同的团队拥有和管理.我想让一个系统的用户访问另一个系统的用户.他们不会共享同一个身份存储.如果用户可以对其实例进行身份验证,然后使用令牌向其实例和远程实例发出请求,我希望如此.这似乎是JSON Web Tokens(JWT)的一个很好的用途.每个系统都需要配置为信任由证书签名的其他令牌.

我已经读过这可以使用带有JWT承载令牌的OAuth来完成,但这似乎比需要的开销更多.为什么要为访问令牌交换承载令牌而不是仅仅使用承载令牌?我怀疑OAuth是否适合,无论是因为它不能控制系统是否可以像访问Web上的许多示例一样访问用户的数据,而是用户是否可以访问存储在系统中的数据.

问题的下一部分是确定如何创建这些JWT令牌,看起来像WS-Trust STS这样的东西是合适的.我没有看到任何简单的,只是验证用户和返回令牌.可能有助于延长令牌的到期和令牌的验证是否有用?

在过去,我能够使用带有WS-Security和SAML断言的SOAP来启用此类功能.我想看看是否可以使用REST和JWT令牌完成相同的操作.网上有很多帖子建议不要推销你自己的安全框架,所以我有点犹豫要不要向前推进.我看到微软已经添加了处理程序来处理使用JWT令牌的服务保护,所以看起来他们看到了这种方法的一些价值.

有没有人能够以符合标准且简单的方式了解如何以REST服务完成此类身份联合?

Eug*_*ace 4

是的,这就是我向客户推荐的方法。事实上,JWT 是 Windows Azure 移动服务保护其端点的方式。JWT 处理起来相对简单(例如与 SAML 令牌相比),但与access_tokens(例如具有签名)相比保留了有趣的属性。

本文档展示了如何使用 WebApi 和我们的产品执行此操作的示例(如果您使用的是 MS 技术)。不过,这些原则是通用的,无论您是否使用我们的 STS,您都可以应用。