У меня есть сервер авторизации и сервер ресурсов, реализованный с использованием весенней загрузки с oauth2. На сервере ресурсов я настроил конечную точку check_token и соответствующую информацию для проверки запросов от сервера авторизации.
security:
oauth2:
resource:
token-info-uri: http://localhost:9191/auth-service/oauth/check_token
client:
client-id: mobile
client-secret: secret
Так что теперь, когда приходит запрос с токеном-носителем, он позволяет получить доступ к серверу ресурсов. Но если токен украден и попытаться обновить запись другого пользователя, это все еще возможно, поскольку у него / нее есть действительный токен. Чтобы уменьшить этот риск, я хотел добавить фильтр на сервере ресурсов и проверить с уникальным идентификатором, который поставляется вместе с заголовком запроса, против поля идентификатора, которое я добавил в токен при создании токена. Но объект аутентификации возвращает только имя пользователя владельца токена.
final OAuth2Authentication authentication = (OAuth2Authentication) SecurityContextHolder
.getContext().getAuthentication();
// this principal object returns the user name.
Object principal = authentication.getUserAuthentication().getPrincipal();
Я хочу, чтобы этот основной объект или другое свойство отправили мне идентификатор пользователя, который я установил для токена. Это мой ответ check_token, как вы видите, в ответе есть поле ИД пользователя.
{
"aud": [
"oauth2-resource"
],
"data": {
"userId": "uid-0c51148d-162a-4fa4-95c5-asd3434",
},
"user_name": "test",
"scope": [
"READ",
"WRITE",
"UPDATE"
],
"active": true,
"client_id": "mobile",
}
Пожалуйста, помогите мне разобраться с этим.