我正在研究开发一个使用REST公开服务的应用程序。这些服务将通过浏览器和非浏览器客户端访问。我希望这个软件的安装会由不同的团队拥有和管理。我想让一个系统的用户访问另一个系统的用户。他们不会共享同一个身份存储。如果用户可以对其实例进行身份验证,然后使用令牌向其实例和远程实例发出请求,我希望如此。这似乎是JSON Web Tokens(JWT)的一个很好的用途。每个系统都需要配置为相互信任由证书签名的其他令牌。
我已经读过这可以使用带有JWT承载令牌的OAuth来完成,但这似乎比需要的开销更多。为什么要为访问令牌交换承载令牌而不是仅仅使用承载令牌?我怀疑OAuth是否适合,无论是因为它不能控制系统是否可以像访问Web上的许多示例一样访问用户的数据,而是用户是否可以访问存储在系统中的数据。
问题的下一部分是确定如何创建这些JWT令牌,看起来像WS-Trust STS这样的东西是合适的。我没有看到任何简单的,只是验证用户和返回令牌。可能有必要支持延长令牌的到期时间和令牌的验证吗?
过去,我能够使用带有WS-Security和SAML断言的SOAP来启用此类功能。我想看看是否可以使用REST和JWT令牌完成相同的操作。网上有很多帖子建议不要推销你自己的安全框架,所以我有点犹豫要不要向前推进。我看到微软已经添加了处理程序来处理使用JWT令牌的服务保护,所以看起来他们看到了这种方法的一些价值。
是否有人了解如何以符合标准且简单的方式完成REST服务的此类身份联合?
答案 0 :(得分:4)
是的,这是我向客户推荐的方法。事实上,JWT是Windows Azure移动服务如何保护其端点的方式。 JWT处理相对简单(例如与SAML令牌相比),但与access_tokens
相比保留了有趣的属性(如签名)。
This doc显示了如何使用WebApi和我们的产品(如果您使用的是MS技术)的示例。这些原则是通用的,无论您是否使用我们的STS,您都可以申请。