Я работаю над статьей, которая может вам помочь: https://www.baeldung.com/spring-security-oauth2-jws-jwk
Итак, чтобы настроить сервер авторизации Spring Security OAuth для добавления заголовка JWT kid ,вы можете выполнить шаги раздела 4.9:
- создать новый класс, расширяющий JwtAccessTokenConverter
- В конструкторе:
- настроить родительский элементкласс, используя тот же подход, который вы использовали
- получить объект Signer , используя ключ подписи, который вы используете
- переопределить метод кодирования,Реализация будет такой же, как родительская, с той лишь разницей, что вы также будете передавать пользовательские заголовки при создании токена String
public class JwtCustomHeadersAccessTokenConverter extends JwtAccessTokenConverter {
private JsonParser objectMapper = JsonParserFactory.create();
final RsaSigner signer;
public JwtCustomHeadersAccessTokenConverter(KeyPair keyPair) {
super();
super.setKeyPair(keyPair);
this.signer = new RsaSigner((RSAPrivateKey) keyPair.getPrivate());
}
@Override
protected String encode(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
String content;
try {
content = this.objectMapper.formatMap(getAccessTokenConverter().convertAccessToken(accessToken, authentication));
} catch (Exception ex) {
throw new IllegalStateException("Cannot convert access token to JSON", ex);
}
Map<String, String> customHeaders = Collections.singletonMap("kid", "my_kid");
String token = JwtHelper.encode(content, this.signer, this.customHeaders)
.getEncoded();
return token;
}
}
- Затем, конечно, создайтеbean-компонент, использующий этот конвертер:
@Bean
public JwtAccessTokenConverter accessTokenConverter(KeyPair keyPair) {
return new JwtCustomHeadersAccessTokenConverter(keyPair);
}
Здесь я использовал экземпляр KeyPair для получения ключа подписи и настройки конвертера (на основе примера из статьи), но вы можете адаптировать его к своемуконфигурации.
В этой статье я также объясняю соответствующие конечные точки, предоставляемые сервером аутентификации OAuth Spring Security.
Кроме того, что касается комментария @Ortomala Lokni, я не ожидаю, что Spring Security OAuth добавитлюбые новые функции на данный момент.В качестве альтернативы вы можете подождать, чтобы взглянуть на функции сервера авторизации Spring Security, которые планируется выпустить в 5.3.0