Я застрял с реализацией весенней загрузки в качестве сервера ресурсов для нескольких серверов авторизации для проверки токенов доступа / идентификатора, предоставляемых серверами авторизации (такими как google, facebook через внешние библиотеки). Вот архитектура, которую я ищу ниже желаемого потока в качестве рабочей модели.
Желаемое изображение архитектуры - Нажмите здесь
что я реализовал до сих пор : я использовал библиотеку angularx-social-login на angular 8, чтобы получить нужные токены Google. Мне удалось передать токен обратно на сервер внутренних ресурсов, чтобы проверить его с помощью Google и авторизоваться. Ниже приведены фрагменты кода.
Файл свойств:
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;
}
}
Приведенный выше фрагмент работает для одного сервера авторизации (в данном случае Google) но
ниже мои проблемы
- Как перехватить код для проверки, если пользователь сначала существует в нашей БД?
- Как сделать Ли добавить поддержку другого сервера авторизации, например, Facebook?