首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Spring将UserDetails附加到从JWT令牌接收的主体

如何使用Spring将UserDetails附加到从JWT令牌接收的主体
EN

Stack Overflow用户
提问于 2015-10-08 15:40:43
回答 2查看 6.5K关注 0票数 2

我有这些服务

  • 使用JDBC提供程序(DB-1)的oauth2身份验证服务器
  • 支持Zuul的web应用程序,它代理对authserver和资源服务器的请求。
  • 启用@EnableOauth2Resource (DB-2)的资源

我需要使用从DB-1接收的凭据从DB-2获取资源服务器中的用户详细信息,并将启用权限设置为当前主体,以便进一步使用@RolesAllowed注释的@PreAuthorize of @RolesAllowed注释。

在成功使用org.springframework.security.oauth2.provider.OAuth2Authentication令牌进行身份验证之后,是否有一些钩子可以替换或更新oauth2?

EN

回答 2

Stack Overflow用户

发布于 2017-08-08 20:36:31

通过将资源服务器配置为..。

代码语言:javascript
复制
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {


    public ResourceServerConfiguration() {
        super();
    }


    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated();
    }

    /* returns org.springframework.security.core.userdetails.UserDetailsService */
    @Bean
    UserDetailsService customUserDetailsService () {
        return new CustomUserDetailsService();
    }

    @Bean
    public UserAuthenticationConverter userAuthenticationConverter () {
        DefaultUserAuthenticationConverter defaultUAC = new DefaultUserAuthenticationConverter();
        defaultUAC.setUserDetailsService(customUserDetailsService());
        return defaultUAC;
    }

    @Bean
    public AccessTokenConverter accessTokenConverter() {
        DefaultAccessTokenConverter defaultATC = new DefaultAccessTokenConverter();
        defaultATC.setUserTokenConverter(userAuthenticationConverter());
        return defaultATC;
    }

    @Bean
    RemoteTokenServices getRemoteTokenServices () {
        RemoteTokenServices rts = new RemoteTokenServices();
rts.setCheckTokenEndpointUrl("http://localhost:9999/uaa/oauth/check_token");
        rts.setAccessTokenConverter(accessTokenConverter());
        rts.setClientId("yourClientID");
        rts.setClientSecret("yourClientSecret");
        return rts;
    }
    ...

}

在这里,我们基本上是使用customUserDetailsService更新资源服务器上的身份验证主体,方法是从accesstoken获取身份验证信息。RemoteTokenServices查询auth-server的/check_token端点以获取访问令牌的内容。如果端点返回一个400响应,这表示令牌无效。

票数 3
EN

Stack Overflow用户

发布于 2015-10-14 19:49:59

如果使用Spring并且您的用户详细信息可以以标准方式获取,那么首先检查自定义用户信息上的Spring文档。

如果您需要进一步的控制,我建议提供一个ResourceServerConfigurer来提供一个自定义ResourceServerTokenServices,它可以用所需的主要细节填充您的OAuth2Authentication。

ResourceServerTokenServices由OAuth2AuthenticationManager或OAuth2ClientAuthenticationProcessingFilter传递给一个accessToken,并期望得到一个填充的OAuth2Authentication作为回报。这提供了获取主体信息并将其填充到OAuth2Authentication对象中的机会。

同样,如果使用Spring,ResourceServerConfigurer (如果实例化为bean )将被OAuth2自动配置所获取,您的ResourceServerTokenServices将被注册。

代码语言:javascript
复制
@Configuration
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

    @Autowired
    private MyResourceServerTokenServices tokenServices;

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.tokenServices(tokenServices);
    }
}

覆盖

代码语言:javascript
复制
@Override
public OAuth2Authentication loadAuthentication(String accessToken) {
    // fetch user information and return populated authentication
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33020277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档