oauth-2.0 - 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;
}
}
上面的代码片段适用于一个授权服务器(在这种情况下是谷歌)但是
以下是我的问题
- 如何拦截代码以首先验证用户是否存在于我们的数据库中?
- 如何添加对另一个授权服务器(如 facebook)的支持?
解决方案
推荐阅读
- html - 让 html 选择始终显示相同的选项
- c - C语言逐字节无限循环复制指针内容
- wagtail - 鹡鸰草稿段落样式
- python-3.x - 在pyspark中展平Maptype列
- internet-explorer - IE 中的 Nuxt - 使用粘性
- javascript - 根据条件为变量赋值的最简单方法
- forms - 浏览器返回页面时,Vue.js 表单数据绑定丢失
- node.js - Node.js - 检测重命名文件/目录事件
- javascript - 使用 HTML/CSS/JavaScript 隐藏表头而不使用 seach 输入
- asp.net - SSRS 未在报告中显示数据,因为我的 sp 返回数据