Spring Cloud Security:如何为Oauth2资源服务器/ OAuth2授权服务器支持多个身份提供者?

时间:2020-07-31 10:19:06

标签: oauth-2.0 spring-cloud

我想用几个支持多个身份提供者(例如google,facebook,github,....)的oauth2资源服务器以及一个自我实现的授权机制来构建一个春季云基础架构。

Oauth2资源服务器示例

安全配置

@Configuration
@EnableWebSecurity
@EnableResourceServer
public class Oauth2ResourceServerConfiguration extends WebSecurityConfigurerAdapter {

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

application.yml

security:
  oauth2:
    resource:
      user-info-uri: https://api.github.com/user

如您所见,该示例使用github作为身份提供者,并且可以正常工作。

Oauth2授权服务器示例:

Config

@Configuration
@EnableAuthorizationServer
public class Oauth2AuthorizationServerConfiguration extends GlobalAuthenticationConfigurerAdapter {

    @Override
    public void init(final AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("user").password("{noop}user").roles("USER")
                .and()
                .withUser("admin").password("{noop}admin").roles("USER", "ADMIN");
    }

    @Override
    public void configure(final AuthenticationManagerBuilder auth) throws Exception {
        super.configure(auth);
    }
}

application.yml

security:
  oauth2:
    client:
      client-id: user
      client-secret: user
      authorized-grant-types: password,client_credentials,authorization_code,refresh_token
      scope: read,write

我可以将我的oauth2资源服务器更改为使用授权服务器:

security:
  oauth2:
    resource:
      #user-info-uri: https://api.github.com/user
      user-info-uri: http://${AUTH_HOST:localhost}:${AUTH_PORT:9000}/user

它工作得很好。

但是,如果我现在想同时使用它们和github和我自己的授权服务器,该怎么办? 我是否只是需要在Oauth2资源服务器中使用其他配置来提供多个user-info-uri还是要做更多的事情?

我可以扩展自己的授权服务来支持github&co吗?

我不想使用Auth0和Co,因为我真的不愿意将应用程序中最重要的部分外包:安全性。即使我想尝试。但是到目前为止,我找不到任何适用于auth0 + spring cloud gateway +所有基础服务令牌认证的工作示例。

0 个答案:

没有答案