Как сохранить токен, полученный из другой системы, в приложении Spring? - PullRequest
1 голос
/ 11 октября 2019

Я получаю токен из другой системы, используя учетные данные, предоставленные клиентом. После получения токена я создаю UsernamePasswordAuthenticationToken и помещаю его в SecurityContextHolder.

Я также хотел бы сохранить токен, потому что он мне понадобится для выполнения вызовов API. Куда мне положить токен? Мне не нравится идея поместить токен в свойство password UsernamePasswordAuthenticationToken.

Вы можете найти код ниже:

override fun authenticate(authentication: Authentication?): Authentication {
    authentication?.let {
        val email = authentication.name
        val password = authentication.credentials.toString()

        val token = authenticationSource.getAuth(email, password) //  I want to store it somewhere!
        return UsernamePasswordAuthenticationToken(email, password, listOf(SimpleGrantedAuthority("USER")))
    }

    throw AuthenticationServiceException("Authentication object is equal null")
}

1 Ответ

1 голос
/ 14 октября 2019

Для решения этой проблемы я предоставил собственную реализацию Principal:

data class UserInfo(val email: String, val token: String) : Principal {
    override fun getName(): String = email
}

, а затем передал экземпляр UserInfo конструктору UsernamePasswordAuthenticationToken:

UsernamePasswordAuthenticationToken(UserInfo(email, token), password, listOf(SimpleGrantedAuthority("USER")))

И если вам нужен этот токен, вы сможете извлечь его из SecurityContext с помощью простой строки кода:

(SecurityContextHolder.getContext().authentication.principal as UserInfo).token
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...