是否可以在请求时将自定义声明添加到访问令牌中?
我的意思是,默认情况下,授权服务器会添加其声明,但在mu的情况下,我想请求一个访问令牌,请求额外的自定义声明。
这可能吗?
我尝试使用nimbusds
库:
下面是我的代码:
/**
* Obtains an OAuth2 access token using the client credentials grant.
*
* @param clientId the client ID to authenticate with the token endpoint
* @param clientSecret the client secret to authenticate with the token endpoint
* @return the access token value as a string
*/
public String getToken(String clientId, String clientSecret) throws URISyntaxException, ParseException, IOException {
// Construct the client credentials grant
AuthorizationGrant clientGrant = new ClientCredentialsGrant();
// The credentials to authenticate the client at the token endpoint
ClientID clientID = new ClientID(clientId);
Secret clientSECRET= new Secret(clientSecret);
ClientAuthentication clientAuth = new ClientSecretBasic(clientID, clientSECRET);
// The request scope for the token (may be optional)
// Scope scope = new Scope("core");
// The token endpoint
URI tokenEndpoint = new URI("http://localhost:5444/oauth2/token");
// URI tokenEndpoint = new URI("http://localhost:8081/realms/master/protocol/openid-connect/token");
// Make the token request
TokenRequest request = new TokenRequest(tokenEndpoint, clientAuth, clientGrant, null, null, Map.of("custom", List.of("custom")));
TokenResponse response = TokenResponse.parse(request.toHTTPRequest().send());
if (! response.indicatesSuccess()) {
// We got an error response...
TokenErrorResponse errorResponse = response.toErrorResponse();
log.info("errorResponse: {}", errorResponse.toString());
}
AccessTokenResponse successResponse = response.toSuccessResponse();
// Get the access token
AccessToken accessToken = successResponse.getTokens().getAccessToken();
log.info("accessToken: {}", accessToken.toJSONString());
return accessToken.getValue();
}
正如你所看到的,我正在尝试在这一行代码中添加自定义值:
TokenRequest request = new TokenRequest(tokenEndpoint, clientAuth, clientGrant, null, null, Map.of("custom", List.of("custom")));
但收到的令牌没有请求自定义声明。
有什么想法吗
1条答案
按热度按时间axr492tv1#
OAuth标准不允许您直接在授权消息中请求自定义声明,因为这样做可能会产生重大的安全问题。
自定义声明的发布必须在授权服务器中预先配置,沿着提供检索声明的运行时值的方法。这是以管理员批准的方式完成的。然后在令牌发行时使用以下方法之一,其中第一种方法可以提供对域特定声明的发行的最佳控制。
API请求将传入身份属性,例如
subject
、email
,并接收回域特定属性,例如roles
、subscription_level
。然后将返回的值发给令牌。下一步应该是在您的授权服务器文档中查找这样的功能。并非所有人都支持这种行为。