Spring Boot в качестве сервера ресурсов (проверка JWK) и Angular / Cordova в качестве внешнего интерфейса - поддержка OAuth2 для социальных сетей (Facebook и Google) - PullRequest
0 голосов
/ 26 февраля 2020

Я застрял с реализацией весенней загрузки в качестве сервера ресурсов для нескольких серверов авторизации для проверки токенов доступа / идентификатора, предоставляемых серверами авторизации (такими как 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) но

ниже мои проблемы

  1. Как перехватить код для проверки, если пользователь сначала существует в нашей БД?
  2. Как сделать Ли добавить поддержку другого сервера авторизации, например, Facebook?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...