当前位置: 首页 > 知识库问答 >
问题:

如何使用OAuth2用Spring获得自定义主体对象?

佟阳焱
2023-03-14

我有一个使用spring-security-jwt和spring-security-oauth2的Spring Boot应用程序。我有一个扩展UserDetails的自定义User对象和一个从loadUserByUsername方法返回此对象的自定义UserDetailsService。

但是,当我使用身份验证对象的getPrincipal方法并试图强制转换到我的自定义用户对象时,它失败了,因为主体返回的字符串与我的自定义用户对象相反。

我的实际目标是在每个方法调用中消除对持久层的访问,因为这些方法调用需要自定义对象详细信息,这是最重要的。

共有1个答案

公冶谦
2023-03-14

可以通过将AccesStokenConverter(它间接保存UserDetailsService)设置为JWTAccesStokenConverter来实现这一点。请参见AccesStokenConverter()方法。

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    // Other configurations omitted

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(tokenStore())
                .accessTokenConverter(accessTokenConverter())
                .tokenEnhancer(accessTokenConverter())
                .authenticationManager(authenticationManager);
    }

    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(accessTokenConverter());
    }

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        DefaultUserAuthenticationConverter duac = new DefaultUserAuthenticationConverter();
        duac.setUserDetailsService(userDetailsService);

        DefaultAccessTokenConverter datc = new DefaultAccessTokenConverter();
        datc.setUserTokenConverter(duac);

        JwtAccessTokenConverter jatc = new JwtAccessTokenConverter();
        jatc.setAccessTokenConverter(datc); // IMPORTANT
        jatc.setSigningKey("your-signing-key");
        return jatc;
    }

    @Bean
    public DefaultTokenServices tokenServices() {
        DefaultTokenServices tokenServices = new DefaultTokenServices();
        tokenServices.setTokenStore(tokenStore());
        tokenServices.setSupportRefreshToken(true);
        return tokenServices;
    }
}
 类似资料:
  • 问题内容: 我正在尝试在JFrame中使用特殊字体,但遇到了问题。我有一个这样定义的JLabel: 并且我有一个名为CUSTOMFONT-MEDIUM.TTF(TrueType字体)的文件,但是编写了以下内容: 代码会编译,并且一切正常,除了不会显示“ lab”,因此没有文本。我想这是因为我从未指定字体大小,但是我所做的任何尝试都失败了。有人可以帮我吗? 问题答案: 您创建的字体必须先在中注册,以

  • 我们希望使用外部身份提供者将现有的Spring Security项目从自定义用户名/密码实现(UserDetailsService等)迁移到oauth2登录。 但是,当通过外部提供程序登录时,安全上下文中的身份验证对象是一个,主体是一个。 由于我们在应用程序中使用的都是自定义身份验证主体,因此我们希望将转换为自定义对象。 对于oauth2资源服务器,似乎有一个API可让您将JWtAuthentia

  • 我正在尝试测试我的控制器方法,它将输入参数作为我应用程序中的一个对象。我知道如何用字符串作为输入参数进行测试,但不知道如何用定制的对象进行测试。 下面是我应用程序中的代码 我认为下面的测试代码是测试的方法之一。但它失败了 当我运行上面的测试时,我得到一个错误,说“实际上,这个模拟没有任何交互”。 你能帮我把定制对象传递给MockMvc post方法吗。

  • 问题内容: 我在这里使用答案来尝试通过数据上传进行请求,但是服务器端有不同寻常的要求。该服务器是一个PHP脚本,需要对行,因为它是期待一个文件上传。 但是,在客户端,我想发布一个内存中的缓冲区(在这种情况下为String)而不是文件,但是让服务器像对待文件上传一样处理它。 但是,使用I无法在行上添加必填字段。因此,我尝试使用,但这只是将其放在单独的行上。 我如何才能进入一行,而无需先将其写入文件然

  • servlet堆栈(web)中的Spring Security性允许您在OAuth2授权代码授予流中定制OAuth2登录重定向endpoint基uri(如这里给出的)。我正尝试用Spring WebFlux对反应堆栈做同样的操作。这里的github问题提到了Oauth2LoginSpec上的authorizationRequestResolver和authenticationMatcher,它们可

  • 问题 如何使用自定义中间件在调用下一个上下文时获取响应正文? 到达await _next行后。从调试中调用(上下文); 不从操作结果返回 JSON 数据 获取用户菜单 我需要从上面的操作结果中得到响应体。 我的代码我试试: https://i.stack.imgur.com/PHUMs.png 当有效令牌时,它会在浏览器谷歌上返回如下数据 但在我的应用程序浏览器上返回无效令牌