Несколько клиентов OAuth2 с одним и тем же провайдером: ошибка при авторизации второго запроса - PullRequest
0 голосов
/ 21 января 2019

Я хочу настроить несколько ClientRegistrations для работы с одним и тем же провайдером. Я играю с примером приложения весенней безопасности. моя конфигурация следующая:

spring.security.oauth2.client.registration.alpha.client-id=<C_ID>
spring.security.oauth2.client.registration.alpha.client-secret=<C_S>
spring.security.oauth2.client.registration.alpha.client-name=appa application
spring.security.oauth2.client.registration.alpha.provider=kck
spring.security.oauth2.client.registration.alpha.scope=openid,email,profile
spring.security.oauth2.client.registration.alpha.redirect-uri-template={baseUrl}/login/oauth2/code/appa
spring.security.oauth2.client.registration.alpha.client-authentication-method=basic
spring.security.oauth2.client.registration.alpha.authorization-grant-type=authorization_code

spring.security.oauth2.client.registration.beta.client-id=<C_ID2>
spring.security.oauth2.client.registration.beta.client-secret=<C_S2>
spring.security.oauth2.client.registration.beta.client-name=appb application
spring.security.oauth2.client.registration.beta.provider=kck
spring.security.oauth2.client.registration.beta.scope=openid,email,profile
spring.security.oauth2.client.registration.beta.redirect-uri-template={baseUrl}/login/oauth2/code/appb
spring.security.oauth2.client.registration.beta.client-authentication-method=basic
spring.security.oauth2.client.registration.beta.authorization-grant-type=authorization_code

spring.security.oauth2.client.provider.kck.authorization-uri=https://accounts.google.com/o/oauth2/v2/auth
spring.security.oauth2.client.provider.kck.token-uri=https://www.googleapis.com/oauth2/v4/token
spring.security.oauth2.client.provider.kck.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo
spring.security.oauth2.client.provider.kck.user-info-authentication-method=header
spring.security.oauth2.client.provider.kck.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs
spring.security.oauth2.client.provider.kck.user-name-attribute=sub

Контроллер по сути является копией примера Spring-Security

@GetMapping("/")
    public String index(Model model,
                        @RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient,
                        @AuthenticationPrincipal OAuth2User oauth2User) {
        model.addAttribute("userName", oauth2User.getName());
        model.addAttribute("clientName", authorizedClient.getClientRegistration().getClientName());
        model.addAttribute("userAttributes", oauth2User.getAttributes());
        model.addAttribute("accessToken", authorizedClient.getAccessToken());
        //same info, other approach
//        OidcUser principal = (OidcUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
//        model.addAttribute("claims", principal.getClaims());
        //profile is null
//        model.addAttribute("profile", principal.getUserInfo());
        return "index_ss";
    }

Вход в систему с первым клиентом успешен, но вход в систему 2-го клиента возвращает ошибку при перенаправлении / login / oauth2 / code / appa

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon Jan 21 11:12:21 EET 2019
There was an unexpected error (type=Not Found, status=404).
Not Found

Я ожидаю, что OAuth2LoginAuthenticationFilter успешно перенаправит на "/", пожалуйста, помогите мне понять, почему это не так и как его получить.

другой вопрос касается конечной точки UserInfo, она вообще не вызывается, хотя в файле readme для безопасности Spring указано

At this point, the OAuth Client retrieves your email address and basic profile information from the UserInfo Endpoint and establishes an authenticated session.

Я могу закомментировать URL-адрес конечной точки, и в любом случае возвращенная информация о пользователе будет такой же. Спасибо

...