Spring安全性-Oauth实现

Spring安全性-Oauth实现,spring,spring-security,Spring,Spring Security,我正在尝试实现一个与oauth2类似的授权服务,只是它不需要用户名和密码来生成密钥和刷新令牌。但是从我发现的情况来看,您似乎还需要给它一个用户和密码。有什么解决办法吗 我的代码是: @Configuration public class AuthorizationServerConfiguration implements AuthorizationServerConfigurer { @Autowired private PasswordEncoder passwordEnc

我正在尝试实现一个与oauth2类似的授权服务,只是它不需要用户名和密码来生成密钥和刷新令牌。但是从我发现的情况来看,您似乎还需要给它一个用户和密码。有什么解决办法吗

我的代码是:

@Configuration
public class AuthorizationServerConfiguration implements AuthorizationServerConfigurer {

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Autowired
    private DataSource dataSource;

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.checkTokenAccess("isAuthenticated()").tokenKeyAccess("permitAll()");
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.jdbc(dataSource).passwordEncoder(passwordEncoder);
    }

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

}


@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;


    @Bean
    public AuthenticationManager getAuthenticationManager() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }
}

根据您的要求,您可以使用JWT令牌。 它支持RS256、HS256等多种算法

我将以HS256作为参考

在授权服务器中,您需要基于某个密钥生成令牌。 在客户端。您需要使用相同的密钥验证令牌

如果您不想在授权服务器和客户端服务器之间共享密钥

您可以使用具有公钥和私钥概念的RS256

对于实现,您需要添加一个过滤器,用于检查每个调用的头中的令牌


有关实现的相关信息,请参阅本文。

如果我理解正确,您希望删除服务器到服务器身份验证,因为您可能不需要它,因为它是一个客户端应用程序。我们不会的,至少我还没有找到一个方法,所以用一些琐碎的东西,让它保持原样。如果有人找到了方法,请分享。

是的,这就是我想要的