首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时适用于多种社交网络的EnableOAuth2Sso

同时适用于多种社交网络的EnableOAuth2Sso
EN

Stack Overflow用户
提问于 2015-11-04 01:53:18
回答 3查看 4.4K关注 0票数 4

我正在实现一个spring引导应用程序,它需要提供OAuth2令牌授权并支持多种社交服务(google+、facebook等)。用户应该能够选择他喜欢的社交网络并使用OAuth2授权框架进行登录。我正在使用这里描述的方法来实现上述http://cloud.spring.io/spring-cloud-security/

目前,我的application.yml看起来像这样

代码语言:javascript
复制
spring:
  oauth2:
    client:
      clientId: {{my app's google id}
      clientSecret: {{my app's google secret code}} 
  etc...

此外,spring引导主类被注释为@EnableOAuth2Sso。

我的问题是,使用上述方法,我只能使用一个社交网络来实现我的目的(示例中是google+)。因此,我想知道是否有一种方法同时支持多个社交网络,通过在.yml文件中定义它们。这是可能的还是我应该使用另一种方法?

耽误您时间,实在对不起,

克里斯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-09 07:32:14

@EnableOAuth2Sso特性的设计并不能像简单的YAML声明那样支持多个提供者。您不需要在您的安全配置中安装两个单独的OAuth2AuthenticationProcessingFilters,每个配置都有一个不同的登录路径,然后从一个UI链接到它们。

票数 4
EN

Stack Overflow用户

发布于 2016-10-27 02:03:09

实际上,请查看Mario发布的链接(不确定为什么投票被否决):手册

链接说@EnableOAuth2Sso本质上是@EnableOAuth2Client和一些额外魔术的结合。缺点是您无法轻松地自定义它的行为以支持多个提供者。因此,在本教程中,建议将其替换为@EnableOAuth2Client,然后重复@EnableOAuth2Sso在引擎盖下所做的操作,并添加一些自定义内容。

所以,下面是它的样子:

代码语言:javascript
复制
@SpringBootApplication
@EnableOAuth2Client
@RestController
public class SocialApplication extends WebSecurityConfigurerAdapter {

   private Filter ssoFilter() {
      CompositeFilter filter = new CompositeFilter();
      List<Filter> filters = new ArrayList<>();
      filters.add(ssoFilter(facebook(), "/login/facebook"));
      filters.add(ssoFilter(github(), "/login/github"));
      filter.setFilters(filters);
      return filter;
    }



 private Filter ssoFilter(ClientResources client, String path) {
      OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(path);
      OAuth2RestTemplate template = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext);
      filter.setRestTemplate(template);
      filter.setTokenServices(new UserInfoTokenServices(
          client.getResource().getUserInfoUri(), client.getClient().getClientId()));
      return filter;
    }

  @Bean
    @ConfigurationProperties("github")
    public ClientResources github() {
      return new ClientResources();
    }

  @Bean
    @ConfigurationProperties("facebook")
    public ClientResources facebook() {
      return new ClientResources();
    }

}

代码语言:javascript
复制
class ClientResources {

  @NestedConfigurationProperty
  private AuthorizationCodeResourceDetails client = new AuthorizationCodeResourceDetails();

  @NestedConfigurationProperty
  private ResourceServerProperties resource = new ResourceServerProperties();

  public AuthorizationCodeResourceDetails getClient() {
    return client;
  }

  public ResourceServerProperties getResource() {
    return resource;
  }
}

facebook:
  client:
    clientId: 233668646673605
    clientSecret: 33b17e044ee6a4fa383f46ec6e28ea1d
    accessTokenUri: https://graph.facebook.com/oauth/access_token
    userAuthorizationUri: https://www.facebook.com/dialog/oauth
    tokenName: oauth_token
    authenticationScheme: query
    clientAuthenticationScheme: form
  resource:
    userInfoUri: https://graph.facebook.com/me
github:
  client:
    clientId: bd1c0a783ccdd1c9b9e4
    clientSecret: 1a9030fbca47a5b2c28e92f19050bb77824b5ad1
    accessTokenUri: https://github.com/login/oauth/access_token
    userAuthorizationUri: https://github.com/login/oauth/authorize
    clientAuthenticationScheme: form
  resource:
    userInfoUri: https://api.github.com/user
票数 2
EN

Stack Overflow用户

发布于 2016-07-08 13:09:46

您提供的链接仅显示如何使用启用单个身份验证服务器提供程序的@EnableOAuth2Sso设施。为了实现多个提供者,您应该遵循:

手册

并为每个提供者实现一个过滤器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33512401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档