Создать токен доступа JWT OAuth2 без пароля - PullRequest
0 голосов
/ 25 сентября 2019

Служба авторизации 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...