Итак, я построил "маленький" сервер авторизации oauth2 / openid с нуля в Java, следуя RFC. Все работает хорошо. Теперь я пытался использовать поток учетных данных клиента, используя преимущества нового стека Spring Security для клиентов oauth2 , но меня немного озадачил пример, который я вижу в документации для этот поток.
В моей настройке у меня есть:
- Сервер авторизации
- Один сервер ресурсов
- Другой сервер ресурсов, который должен вызвать защищенная конечная точка на первом сервере ресурсов
Если я правильно понимаю вышеупомянутый поток, он использовался именно в последнем случае.
Что меня озадачивает в примере из Spring, так это что при создании OAuth2AuthorizeRequest требуется действующий принципал, и это не имеет для меня смысла. Я хочу, чтобы мой ресурсный сервер получил access_token от сервера авторизации для себя , зачем мне предоставлять уже аутентифицированного Принципала?
Я действительно попробовал пример и заставил его работать, предоставив действительный Принципал (с использованием access_token, полученного извне с потоком кода авторизации), но в конце вызов метода authorizedClient.getAccessToken () просто возвращает мне тот же токен Принципала, который я предоставил построителю запросов. Более того, при выполнении примера я вижу на своем сервере авторизации, что выдается фактический токен доступа для этого сервера ресурсов и ответ правильный, но он в основном игнорируется в примере кода.
Я мог бы легко реализовать пользовательский фрагмент кода, который выполняет поток, но сначала я хотел попробовать код Spring. Я не уверен, что я делаю не так и чего мне не хватает.