Spring Security中的JWE OAuth2 JWT

bq3bfh9z  于 2023-10-20  发布在  Spring
关注(0)|答案(1)|浏览(198)

可以将JSON Web Encryption(JWE)与Spring Security OAuth2 JWT一起使用吗?
现在我有一个如下的JwtAccessTokenConverter

@Bean
public JwtAccessTokenConverter accessTokenConverter() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter() {

        @Override
        public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
            DBUserDetails user = (DBUserDetails) authentication.getUserAuthentication().getPrincipal();
            final Map<String, Object> additionalInfo = new HashMap<>();
            additionalInfo.put("user_id", user.getUser().getId());
            ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
            OAuth2AccessToken enhancedToken = super.enhance(accessToken, authentication);
            return enhancedToken;
        }

    };

    converter.setSigningKey(jwtAccessTokenConverterSigningKey);

    DefaultAccessTokenConverter accessTokenConverter = new DefaultAccessTokenConverter();
    DefaultUserAuthenticationConverter userTokenConverter = new DefaultUserAuthenticationConverter();
    userTokenConverter.setUserDetailsService(userDetailsService);
    accessTokenConverter.setUserTokenConverter(userTokenConverter);

    converter.setAccessTokenConverter(accessTokenConverter);

    return converter;
}

如何在这里添加JWE支持?

zf9nrax1

zf9nrax11#

您可以在Spring Oauth2 resource-server中使用不透明令牌支持。这意味着您的用户可以提供编码的JWT令牌(JWE),并且您的Spring后端应用程序将能够将令牌转换为Principal对象,而无需任何额外的代码。
如果您的OAuth2服务器提供introspection endpoint,这是可能的。
spring-boot-starter-oauth2-resource-server:3.1.2的配置非常简单:

spring.security.oauth2.resourceserver:
    opaque-token:
      introspection-uri: <your oauth2 server introspect url>
      client-id: <clientId>
      client-secret: <clientSecret>

在Java配置中,通过向SecurityWebFilterChain添加以下内容来启用不透明令牌支持:

http.oauth2ResourceServer(rs -> rs.opaqueToken(Customizer.withDefaults()))

文件:Spring Security 6.1.2 docs

相关问题