Я хочу настроить несколько 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-адрес конечной точки, и в любом случае возвращенная информация о пользователе будет такой же.
Спасибо