我需要在规范中指定的客户端凭据授予类型令牌请求中传递客户端断言 - https://www.rfc-editor.org/rfc/rfc7521.html。 根据上述规范,我们需要在令牌请求负载中指定 client_assertion_type 和 client_assertion,而不是 client_id 和 client_secret。
以下是我尝试过的。
生成的 JWT:
map<json> sub = {
"sub" : "abcd"
};
jwt:IssuerConfig issuerConfig = {
customClaims: sub,
issuer: "abcd",
audience: "https://abcd/oauth2/token",
expTime: 3000,
signatureConfig: {
config: {
keyFile: "./privatekey.pem"
}
}
};
string jwt = check jwt:issue(issuerConfig);
构造了传递 JWT 的可选参数映射:
map<string> jwtAssertion = {
"client_assertion_type" : "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
"client_assertion" : jwt
};
Passed the optional params to the client credentials config record:
oauth2:ClientCredentialsGrantConfig epicConfig = {
tokenUrl: "https://abcd/oauth2/token",
clientId: "abcd",
optionalParams: jwtAssertion,
clientSecret: "random"
};
但这里的问题是,由于 client_id 和 client_secret 是强制性的,我尝试连接的后端返回 400。
是否有任何建议来处理这种情况,我需要发送没有 id 和秘密的断言?另外,未来是否有计划将规范https://www.rfc-editor.org/rfc/rfc7521.html中提到的支持添加到oauth2模块中?
目前,
oauth2
模块不支持此功能。
我们可以使用单独的 HTTP 客户端,并通过向 STS 发送 post 请求来获取令牌。然后,手动将获得的断言/令牌设置在资源请求的标头中。