Служба авторизации My Spring Boot может создавать токены JWT для пользователей с правильными учетными данными.Также будет возможно получить токен через социальный логин (в данном случае Facebook).Аутентификация Facebook уже работает, и я получаю перенаправление на следующую конечную точку после того, как получаю данные пользователей Facebook.
Я мог бы создать токен JWT полностью с нуля, но это не то, чего я хочу.Я хочу использовать уже настроенный (с парой ключей и т. Д.) TokenServices
с моего сервера аутентификации.
Единственный способ, который я нашел, был через TokenEndpoint
.Проблема в том, что мне нужен пароль пользователя, которого у меня нет и не должно быть на данный момент.
Как я могу сгенерировать токен из того, что я уже настроил?
ЭтоКонечная точка - то, где я в конечном итоге после перенаправления Facebook:
@GetMapping("/loginSuccess")
fun getLoginInfo(authentication: OAuth2AuthenticationToken): ResponseEntity<OAuth2AccessToken> {
val client = authorizedClientService.loadAuthorizedClient<OAuth2AuthorizedClient>(authentication.authorizedClientRegistrationId, authentication.name)
val userInfoEndpointUri = client.clientRegistration.providerDetails.userInfoEndpoint.uri
if (!StringUtils.isEmpty(userInfoEndpointUri)) {
val restTemplate = RestTemplate()
val headers = HttpHeaders()
headers.add(HttpHeaders.AUTHORIZATION, "Bearer " + client.accessToken.tokenValue)
val entity = HttpEntity("", headers)
val response = restTemplate.exchange(userInfoEndpointUri, HttpMethod.GET, entity, Map::class.java)
// At this point I have the email address of the user and I am able to
// map it to my own User Entity
// This is where I would like to create a token and return it
// However, the following generation process requires the user's password
return authService.generateToken((response.body as Map<*, *>)["email"] as String)
}
throw AuthenticationException("Error")
}
Я хотел бы использовать getAccessToken(OAuth2Authentication authentication)
в JwtTokenStore
, но его реализация возвращает ноль:
@Override
public OAuth2AccessToken getAccessToken(OAuth2Authentication authentication) {
// We don't want to accidentally issue a token, and we have no way to
// reconstruct the refresh token
return null;
}