将自定义头传递到spring-security-oauth2-authorization-server中的/oauth2/token API

szqfcxe2  于 2023-05-28  发布在  Spring
关注(0)|答案(1)|浏览(178)

我是spring oauth服务的新手,正在尝试将“user-id”作为附加头传递给/oauth2/token API,然后将其作为附加参数添加到使用JwtTokenCustomizerConfig.tokenCustomizer()生成的访问令牌中
我找不到任何可以帮助传递头的类,因为所有旧的类都不推荐使用,新的库也不熟悉。也找不到将动态值传递给accessToken中的set的方法。
以前的oauth2库,头文件用类

HeaderMapRequestWrapper extends HttpServletRequestWrapper

                HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(request);
                requestWrapper.addHeader(OAuth2ServerUtils.USER_ID, userId);

使用JwtAccessTokenConverter.enhance(),我们可以添加额外的参数:

String validUserId = request.getHeader(OAuth2ServerUtils.USER_ID);
                    additionalInfo.put(OAuth2ServerUtils.USER_ID, validUserId);

上面的oauth库已被弃用,目前有新的库,我想将userId作为header传递给/oauth2/token API,然后包含到生成的JWT令牌中。我可以在新的Spring授权服务器库中包含以下代码的静态键值对:

@Configuration
public class JwtTokenCustomizerConfig {

    @Bean
    public OAuth2TokenCustomizer<JwtEncodingContext> tokenCustomizer() {
        return (context) -> {
            if (OAuth2TokenType.ACCESS_TOKEN.equals(context.getTokenType())) {
                context.getClaims().claims((claims) -> {
                    claims.put("userId", "1234");
                });
            }
        };
    }

}
ivqmmu1c

ivqmmu1c1#

您可以始终使用RequestContextHolder访问Spring中的当前HttpServletRequest。例如:

var requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
var request = requestAttributes.getRequest();
var userId = request.getHeader("userId");

OAuth2TokenCustomizer示例中,如果在请求中将头传递给/oauth2/token端点,则这将起作用。

相关问题