Java Spring Security 5.3.2 OAuth 2,资源所有者密码凭据流-如何向授权服务器uri添加额外的头参数

Java Spring Security 5.3.2 OAuth 2,资源所有者密码凭据流-如何向授权服务器uri添加额外的头参数,java,spring,spring-boot,spring-security,spring-security-oauth2,Java,Spring,Spring Boot,Spring Security,Spring Security Oauth2,我正在尝试从自定义的公司oauth 2授权服务器生成一个访问令牌,该服务器具有资源所有者密码凭据流 看 此服务器仅在收到以下参数时生成访问令牌: POST https://custom_corporate_server/auth/oauth/v2/token Header idp: 99 Body grant_type: password scope: my_scope client_id: 00******-****-****-****-**********99 client_secret

我正在尝试从自定义的公司oauth 2授权服务器生成一个访问令牌,该服务器具有资源所有者密码凭据流

此服务器仅在收到以下参数时生成访问令牌:

POST https://custom_corporate_server/auth/oauth/v2/token

Header
idp: 99

Body
grant_type: password
scope: my_scope
client_id: 00******-****-****-****-**********99
client_secret: 00******-****-****-****-**********99
username: my_user
password: my_password
他们的配置需要额外的标题自定义参数:idp-应该是数字

我使用的是Spring Boot 2.3.0和Spring Security 5.3.2

我按照下面的链接构建了我的测试示例:

我无法将标头中的此参数传递给授权服务器。如何做到这一点是我今天面临的主要难题。

请看这篇文章,它解释了对授权和令牌请求的各种定制。在您的案例中,关于的部分似乎准确地描述了您需要什么

你可以这样做:

public class CustomRequestEntityConverter implements Converter<OAuth2PasswordGrantRequest, RequestEntity<?>> {

    private OAuth2PasswordGrantRequestEntityConverter defaultConverter;

    public CustomRequestEntityConverter() {
        defaultConverter = new OAuth2PasswordGrantRequestEntityConverter();
    }

    @Override
    public RequestEntity<?> convert(OAuth2PasswordGrantRequest req) {
        RequestEntity<?> entity = defaultConverter.convert(req);
        MultiValueMap<String, String> params = entity.getHeaders();
        params.add("idp", "99");
        return new RequestEntity<>(params, entity.getHeaders(), entity.getMethod(), entity.getUrl());
    }
}

我认为这篇文章很好地解释了你的案例。@wjans谢谢你的回复,但不要申请我的案例。我需要为auth服务器传递额外的头参数。这与另一个类似,但也不适用于本案例。谁来帮帮我@AndréMicocci也可参见参考文件
public class CustomRequestEntityConverter implements Converter<OAuth2PasswordGrantRequest, RequestEntity<?>> {

    private OAuth2PasswordGrantRequestEntityConverter defaultConverter;

    public CustomRequestEntityConverter() {
        defaultConverter = new OAuth2PasswordGrantRequestEntityConverter();
    }

    @Override
    public RequestEntity<?> convert(OAuth2PasswordGrantRequest req) {
        RequestEntity<?> entity = defaultConverter.convert(req);
        MultiValueMap<String, String> params = entity.getHeaders();
        params.add("idp", "99");
        return new RequestEntity<>(params, entity.getHeaders(), entity.getMethod(), entity.getUrl());
    }
}