Я думаю, что есть некоторые термины, использующие комментарии и в вопросе, которые немного сбивают с толку.
Итак, мне нужно, чтобы server2 имел 'ROLE_SUPERVISOR' для доступа к этому API.
В OAuth 2.0 серверы - это не то, что связано с ролями. У токена есть утверждения, и эти утверждения могут быть интерпретированы приложением. Как упоминалось в вопросе, вы можете получить токен несколькими способами, одним из которых является предоставление учетных данных клиента.
Однако, как добавить роль ROLE_SUPERVISOR в клиентское приложение
Также не совсем правильно говорить, что у клиентов есть роли.
Я считаю, что OP хочет server2
передать токен OAuth 2.0 в server1
, и что данный токен должен содержать соответствующие утверждения, так что server1
предоставит соответствующий запрос с предоставленными полномочиями ROLE_SUPERVISOR
.
Чтобы получить такой токен с предоставлением учетных данных клиента, вам необходимо настроить клиент на сервере авторизации:
@Override
protected void configure(ClientDetailsServiceConfigurer clients) {
clients.inMemory()
.withClient("id")
.authorizedGrantType("client_credentials")
.authorities("ROLE_SUPERVISOR")
.secret("{noop}secret")
}
Затем server2
может использовать идентификатор клиента и секрет, настроенные для получения токена. Как уже говорилось, Spring Security поставляется с фильтрами для согласования с серверами авторизации и добавления соответствующего заголовка Authorization
к вызову server1
.