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

带有oauth2的Rest服务:找不到令牌的访问令牌

姜淇
2023-03-14

我试图创建spring rest服务,它是由我自己的oauth2资源服务器自动引诱的。我创建了资源服务器:

@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {

    @Autowired
    private TokenStore tokenStore;

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.tokenStore(tokenStore).resourceId("mobileapp");
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/api/shop /**").authenticated().and()
                .authorizeRequests().antMatchers("/auth/**").anonymous();
    }

}
@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager auth;

    @Autowired
    private DataSource dataSource;

    @Autowired
    private BCryptPasswordEncoder passwordEncoder;

    @Bean
    public JdbcTokenStore tokenStore() {
        return new JdbcTokenStore(dataSource);
    }

    @Bean
    protected AuthorizationCodeServices authorizationCodeServices() {
        return new JdbcAuthorizationCodeServices(dataSource);
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.passwordEncoder(passwordEncoder);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
                .authorizationCodeServices(authorizationCodeServices())
                .authenticationManager(auth)
                .tokenStore(tokenStore())
                .approvalStoreDisabled();
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.jdbc(dataSource)
                .passwordEncoder(passwordEncoder);
                .withClient("mobile")
                .authorizedGrantTypes("password", "refresh_token")
                .authorities("ROLE_CLIENT")
                .scopes("read", "write", "trust")
                .autoApprove(true)
               .resourceIds("mobileapp")
                .secret("123456");
    }

{“error”:“server_error”,“error_description”:“java.io.NotSerializableException:org.springframework.security.crypto.bcrypt.bcryptPasswordenCoder”}

在tomcat日志中还有

O.S.S.O.P.token.store.jdbcTokenStore-找不到令牌的访问令牌

@Bean
public BCryptPasswordEncoder passwordEncoder() {
    BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
    return bCryptPasswordEncoder;
}

提前感谢你的帮助。

共有1个答案

李鸿
2023-03-14

重写JdbcTokenStore类并将此函数替换为。

public OAuth2AccessToken readAccessToken(String tokenValue) {
    OAuth2AccessToken accessToken = null;

    try {
        accessToken = new DefaultOAuth2AccessToken(tokenValue);
    }
    catch (EmptyResultDataAccessException e) {
        if (LOG.isInfoEnabled()) {
            LOG.info("Failed to find access token for token "+tokenValue);
        }
    }
    catch (IllegalArgumentException e) {
        LOG.warn("Failed to deserialize access token for " +tokenValue,e);
        removeAccessToken(tokenValue);
    }

    return accessToken;
}

您无法找到访问令牌的问题已经解决。请在oauth2config中使用该类。

 类似资料:
  • 我使用postMan,输入请求地址http://localhost:8011/umrah/oauth/token?client_id=client_2&username=1234567&password=123456&grant_type=password&client_secret=123456,点击send按钮,出现错误,在内存中工作正常,当我想使用Jdbc令牌存储时,想法控制台错误:找不到令

  • 我已经在restful web服务中实现了Spring Security性。 OAuth访问令牌请求 http://localhost:8084/Weekenter/oauth/token?grant_type=password 作为响应,我将获得访问令牌和刷新令牌。 现在我可以通过以下查询字符串参数使用给定的访问令牌请求API服务method.and完美运行。 请求格式 在上面的快照中,我有格式

  • 我想要下一个:从我的网站能够启动虚拟服务器(Ubuntu、linux、windows服务器)。我用AWS编辑了这个,通过IAM很容易找到访问密钥和令牌。 如果可能的话,我也希望使用Azure来获得访问密钥和令牌。我在这里找到了一些关于如何欣赏的教程:https://www.youtube.com/watch?v=ujzrq8Fg9Gc 我看到还有oAuth2,这太多了,无法为这个项目设置它。 还有

  • 我试图通过运行在VM中的java应用程序从GoogleAnalytics中获取一些数据。 我有一个refresh令牌,我想使用这个refresh令牌生成auth令牌,并最终从GA获得数据。 这就是我当前代码的样子。 这里的问题是,是不推荐的,我无法在没有使用refreshToken的情况下创建Credentials类。 我还尝试了另一个流,但它打开浏览器以获得用户身份验证,但我不希望那样。前端将处

  • 我得到的令牌是: http://localhost:8080/servicesmem/oauth/token?username=myuser&password=mypassword&grant_type=password&scope=read,write,trust 我得到: 我得到: 我使用头:Authorization Bearer ACCESS_TOKEN,但我得到了同样的错误。我错过了什么

  • 我正在使用Paypal REST SDK编写PHP代码。我已经设置了我的沙箱帐户使用澳元。当我意识到我最初的交易是以美元进行的,并且交易被冻结后,我就做出了这个决定。 使用我修改过的代码,我正在尝试创建支付--我假设我会得到一个URL,它将允许我重定向用户批准支付。 任何关于这条信息的想法。在澳大利亚,Paypal似乎不支持直接信用卡支付,但我不认为这是问题所在。