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

问题描述:

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

我已经读过,这可以使用OAuth与JWT承载令牌完成,但是这似乎比需要更多的开销。为什么要交换不记名令牌作为访问令牌而不是使用持票人令牌?我质疑OAuth是否适合,因为它不控制系统是否可以访问用户的数据,除非网络上的许多例子,但用户是否可以访问存储在系统中的数据。

问题的下一部分是确定如何创建这些JWT令牌,看起来像WS-Trust STS是合适的。我还没有看到任何简单的认证用户并返回令牌。对于扩展令牌的有效期和令牌验证的支持可能有用吗?

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

有没有人对如何在兼容标准和简单方式下完成REST服务的这种联合身份验证有所了解?

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

This doc显示了一个关于如何使用WebApi和我们的产品(如果您使用MS技术)的例子。这些原则虽然是通用的,但无论您是否使用STS,您都可以申请。