我想使用Spring Security设置一个中央身份验证/授权服务器,我可以从中获取JWT令牌,然后我可以使用它来访问另一个Spring Security备份的REST服务器上的受限资源。
这是我的流程:
1)HTML JS / Mobile等客户端在auth服务器上进行身份验证以获取JWT令牌 2)客户端将此标头在HTTP标头中发送到REST服务器以获取对安全资源的访问权限
我认为JWT最适合这种情况,因为它可以包含所有相关数据,REST服务器可以完全无状态,只需解码令牌以获取REST服务器上的所有必要数据(角色,clientid,电子邮件......)
Oauth2是否是正确的选择?如果是这样,有人可以指出我正确的方向吗?如果JWT不是正确的选择,我会接受其他解决方案:)我应该提一下,在我的情况下,也可以在REST服务器上加载来自数据库的客户端信息,但它不应该负责验证用户(意思是没有用户名/密码检查,只是令牌解码/验证......)
答案 0 :(得分:3)
Cloudfoundry UAA是一个开源的OAuth2身份管理解决方案(Apache 2),它发布JWT令牌。您可以查看它的实现方式,或者自己使用它,无论是作为服务器还是仅仅作为JAR。它在Spring OAuth中实现了一堆现有策略。它还可以选择拥有自己的用户数据库,也可以实现自己的用户数据库。有很多选项和扩展点,很多人以各种方式使用它(不是全部使用Cloudfoundry),因为它被设计成通用的。
Spring OAuth 2.0也有support for JWT tokens,但它还没有发布(大部分实现来自UAA)。
但是,既然你说你不介意不透明的令牌(以及数据库连接),你可能更喜欢在Spring OAuth 1.0中使用JDBC support。在我们搬到JWT之前,它已经在Cloudfoundry中使用了一段时间,因此我可以在生产中担保它。
关于OAuth2是否适合您的用例:您最有能力做出决定。到目前为止,你所说的一切都让我觉得这不是一个坏主意。这是我做过的一个演示文稿,如果有帮助的话(如果你喜欢这样的话,你可以在SpringSource频道的YouTube上找到它)。