首页 > 解决方案 > Spring Boot 作为资源服务器(JWK 验证)和 Angular/Cordova 作为前端 - 用于社交登录(Facebook 和 Google)的 OAuth2 支持

问题描述

我坚持将 spring boot 实现为多个授权服务器的资源服务器,用于验证授权服务器(例如 google、facebook 通过前端库)提供的访问/id 令牌。这是我正在寻找以下所需流程作为工作模型的架构。

所需的架构图像 - 单击此处

到目前为止我实现了什么:我在 Angular 8 上使用了一个库 angularx-social-login 来获取谷歌所需的令牌。我能够将令牌传递回后端资源服务器以使用谷歌验证令牌并授权。下面是代码片段。

属性文件:

google:
  client-id: xyz
  iss: accounts.google.com

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: https://accounts.google.com
          jwk-set-uri: https://accounts.google.com/.well-known/openid-configuration

安全配置片段

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
private String issuer;

@Value("${spring.security.oauth2.resourceserver.jwt.jwk-set-uri}")
private String jwkSetUri;

@Value("${google.client-id}")
private String clientId;

@Value("${google.iss}")
private String iss;

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
        .authorizeRequests()
        .anyRequest().authenticated().and()
        .oauth2ResourceServer()
        .jwt().decoder(jwtDecoder());
}

@Bean
JwtDecoder jwtDecoder() {
    NimbusJwtDecoder jwtDecoder = (NimbusJwtDecoder)
            JwtDecoders.fromOidcIssuerLocation(issuer);        

    OAuth2TokenValidator<Jwt> audienceValidator = new AudienceValidator(clientId);
    OAuth2TokenValidator<Jwt> withIssuer = JwtValidators.createDefaultWithIssuer(iss);
    OAuth2TokenValidator<Jwt> withAudience = new DelegatingOAuth2TokenValidator<> 
    (withIssuer, audienceValidator);

    jwtDecoder.setJwtValidator(withAudience);

    return jwtDecoder;
}

}

上面的代码片段适用于一个授权服务器(在这种情况下是谷歌)但是

以下是我的问题

  1. 如何拦截代码以首先验证用户是否存在于我们的数据库中?
  2. 如何添加对另一个授权服务器(如 facebook)的支持?

标签: oauth-2.0spring-security-oauth2google-oauthspring-oauth2oauth2client

解决方案


推荐阅读