首页 文章

Spring Security JWT和Oauth2

提问于
浏览
5

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

这是我的流程:

1)HTML JS / Mobile等客户端在auth服务器上进行身份验证以获取JWT令牌2)客户端将此标头在HTTP头中发送到REST服务器以获取对安全资源的访问权限

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

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

2 回答

  • 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 . 在我们搬到JWT之前,它已经在Cloudfoundry中使用了一段时间,所以我可以在 生产环境 中担保它 .

    至于OAuth2是否适合您的用例:您最有能力做出决定 . 到目前为止,你所说的一切都让我觉得这不是一个坏主意 . 这是我做过的演示,如果有帮助的话(如果你喜欢那种东西,你可以在SpringSource Channels 的YouTube上找到它) .

  • 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插件管理应用程序中的授权和身份验证 .

相关问题