2014-02-19 155 views
5

我想使用Spring Security设置一个中央认证/授权服务器,从中可以获取JWT令牌,然后我可以使用它访问另一个Spring Security备份的REST服务器上的受限资源。Spring Security JWT和Oauth2

这里是我的流程:

1)HTML JS /手机等客户端身份验证服务器进行身份验证,以获得JWT令牌 2)客户端的HTTP标头发送此令牌REST服务器来获得对安全资源

访问

我认为JWT最适合这种情况,因为它可以包含所有相关数据,而REST服务器可以完全无状态,并简单地解码令牌以获得REST服务器上的所有必要数据(角色,CLientid,电子邮件...)。

Oauth2是否是正确的选择,如果有的话可以有人亲切地指向我的方向?如果JWT不是正确的选择,我可以接受其他解决方案:)我应该提到,在我的情况下,也可以在REST服务器上从数据库加载客户端信息,但它不应该负责认证用户这意味着没有用户名/密码检查,只是令牌解码/验证...)

回答

3

Cloudfoundry UAA是一个开源OAuth2身份管理解决方案(Apache 2),它发布JWT令牌。你可以看看它的实现方式,或者只是自己使用它,无论是作为服务器还是只是JAR。它在Spring OAuth中实现了一堆现有的策略。它也可以有自己的用户数据库,或者你可以实现你自己的。有很多选项和扩展点,许多人以各种方式使用它(不是所有人都使用Cloudfoundry),因为它被设计为通用的。

Spring OAuth 2.0也有support for JWT tokens,但它还没有发布(大部分实现是从UAA中提取的)。

但是,既然你说你不介意不透明的令牌(和数据库loookup),你可能更喜欢在Spring OAuth 1.0中使用JDBC support。在我们转移到智威汤逊之前,它在Cloudfoundry中使用了相当长的一段时间,所以我可以在生产中担保。

至于OAuth2是否是您的使用案例的不错选择:您处于决定这一状况的最佳位置。到目前为止,你所说的没有什么让我觉得这是一个坏主意。如果有帮助,我会做一个演示(如果你喜欢这样的话,你可以在SpringSource频道的YouTube上找到它)。

+0

将UAA变成社交网络集成和启用Ajax的SSO有多困难。我想我会在UAA本身添加这些功能。可能oauth2不适用于SSO,但它是否支持单一注销机制? – beku8

+1

不太难。但是,你需要什么?你想为社会网络使用sso并发行你自己的代币?如果是这样,那么你只需要改变认证过程。 OAuth2并不是专门为sso设计的,但很多人都是这样使用它 - 这就是为什么Facebook例如(UAA本身公开/ user_info出于同样的目的)。 –

+0

它会给使用spring security + spring oauth2 + spring jwt编写自定义代码的好处,而不是使用uaa吗? – user1595858

0

AlvaroSánchez开发了一个jwt兼容插件。 http://alvarosanchez.github.io/grails-spring-security-rest/1.5.0.RC4/docs/guide/tokenStorage.html#jwt

BuildConfig.groovy安装最新版本:

compile ":spring-security-rest:1.5.0.RC4", { 
     excludes: 'spring-security-core' 
    } 

您只需更改秘密选项Config.groovy中

grails.plugin.springsecurity.rest.token.storage.jwt.secret = 'YourSecretKey' 

,并设置chainMap分离与传统模式的安全管理新的无休无息的安全。

grails.plugin.springsecurity.filterChain.chainMap = [ 
     '/yourApi/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter', // Stateless chain 
     '/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'                   // Traditional chain 
    ] 

您可以使用spring-security-core插件管理应用程序中的授权和身份验证。

相关问题