Spring安全OAuth身份验证需要ClientId和Secret

时间:2018-06-13 15:19:40

标签: java spring authentication spring-security oauth

在我的Spring Security应用程序中,我能够使用postman成功从我的“/ oauth / token”端点获取JWT令牌。但是我希望任何想要进行身份验证的人都可以访问/ oauth / endpoint而无需clientId和secret。

我的安全管理服务器

@Configuration
@EnableWebSecurity
public class GatewaySecurityConfigurer extends WebSecurityConfigurerAdapter {

    @Autowired
    private GatewayUserDetailsService gatewayUserDetailsService;

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

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

    @Bean
    public DaoAuthenticationProvider daoAuthenticationProvider() {
        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
        daoAuthenticationProvider.setPasswordEncoder(passwordEncoder());
        daoAuthenticationProvider.setUserDetailsService(gatewayUserDetailsService);
        return daoAuthenticationProvider;
    }

    @Override
    public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) {
        authenticationManagerBuilder.authenticationProvider(daoAuthenticationProvider());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/oauth/token").permitAll()
                .antMatchers("actuator/**").fullyAuthenticated();
    }

}

和我的资源服务器

@EnableResourceServer
@Configuration
@Import(GatewaySecurityConfigurer.class)
public class GatewayResourceServerConfigurer extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(ResourceServerSecurityConfigurer config) {
        config.tokenServices(tokenServices());
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/oauth/token").permitAll()
                .antMatchers("actuator/**").fullyAuthenticated();
    }

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

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey("123");
        return converter;
    }

    @Bean
    public DefaultTokenServices tokenServices() {
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStore());
        defaultTokenServices.setSupportRefreshToken(true);
        return defaultTokenServices;
    }

}

正如您在两个类中看到的,我已经尝试实现HttpSecurity配置,该配置将允许对/ oauth / token的所有请求,其中需要对其他路径进行身份验证。然而,当我在没有clientId& amp;的情况下发帖时,我对邮递员请求中的401 null http响应感到震惊。秘密。

如何将我的代码作为clientId&验证不需要秘密吗?

1 个答案:

答案 0 :(得分:0)

OAuth是一个授权框架。 (请参阅RFC 6749。)它允许第三方应用程序(客户端)代表用户获得对HTTP服务的有限访问。没有客户的授权没有意义。

您可能只想要一个简单的端点,用户可以登录并获取JWT。

以下教程介绍了如何使用自定义Spring安全过滤器构建JWT身份验证:https://auth0.com/blog/securing-spring-boot-with-jwts