Я предполагаю, что Cannot convert access token to JSON
мог быть из-за неправильно вставленного токена.
Что касается Invalid refresh token
, это происходит потому, что когда JwtTokenStore
читает токен refre sh, он проверяет области действия и отзыв с InMemoryApprovalStore
. Однако для этой реализации утверждения регистрируются только во время авторизации через /oauth/authorize
URL (предоставление кода авторизации) с помощью ApprovalStoreUserApprovalHandler
.
Специально для предоставления кода авторизации (authorization_code
), который вы хотите иметь эту проверку, чтобы запрос токена refre sh не вызывался с расширенной областью без ведома пользователя. Кроме того, необязательно хранить утверждения для отзыва в будущем.
Решение состоит в том, чтобы заполнить ApprovalStore
списком Approval
для всех владельцев ресурсов - статически или динамически. Кроме того, может отсутствовать настройка службы сведений о пользователе endpoints.userDetailsService(userDetailsService)
, которая используется во время процесса refre sh.
Обновление:
Это можно проверить с помощью создание предварительно заполненного InMemoryApprovalStore
:
@Bean
public ApprovalStore approvalStore() {
InMemoryApprovalStore approvalStore = new InMemoryApprovalStore();
Date expirationDate = Date.from(Instant.now().plusSeconds(3600));
List<Approval> approvals = Stream.of("read", "write", "trust")
.map(scope -> new Approval("admin", "trusted", scope, expirationDate,
ApprovalStatus.APPROVED))
.collect(Collectors.toList());
approvalStore.addApprovals(approvals);
return approvalStore;
}
Я также хотел бы взглянуть на его реализацию в storeRefreshToken()
/ storeAccessToken()
методах JwtTokenStore
, так как они имеют пустую реализацию, и Параметры метода содержат все необходимые данные.