这是我完成此集成所需的最后一部分:
我有一个生成 JWT token 的外部身份提供商。这些 token 包含一个声明“auth”,其中包含用户的权限,例如:
"auth": [ "editor", "reviewer"]
。在 WSO2 中,我有一个 API 在其某些端点中需要“编辑器”范围:
- 我正在使用JWT Grant将来自外部 IP 的 JWT 交换为 WSO2 访问 token 以调用 API。
我需要当 WSO2 创建访问 token 时,它将其与 JWT 的“auth”声明中包含的范围关联起来。
这可能吗?是否有可以实现此功能的扩展点?
最佳答案
这应该可以通过扩展 JWT 授权类型并覆盖 validateScope 方法来实现。您可以从 JWT 检索范围并将其设置为 tokReqMsgCtx。然后你应该能够像下面这样设置作用域。
@Override
public boolean validateScope(OAuthTokenReqMessageContext tokReqMsgCtx) {
// Create scopes array
// String scopes[] = getScopesFromJWT();
tokReqMsgCtx.setScope(scopes);
return true;
}
例如,看看如何针对 SAML2 不记名授权类型完成此操作 [1]。
如果您使用 JWT 授权类型,则它是在“repository/conf/identity/identity.xml”文件的 SupportedGrantTypes 部分中配置的。配置中提到了相关的GrantTypeHandlerImplClass。
<SupportedGrantType>
<GrantTypeName>urn:ietf:params:oauth:grant-type:jwt-bearer</GrantTypeName
<GrantTypeHandlerImplClass>org.wso2.carbon.identity.oauth2.grant.jwt.JWTBearerGrantHandler</GrantTypeHandlerImplClass>
....
</SupportedGrantType>
有关编写自定义授权类型的信息,请参阅文档[2]。
[2] https://docs.wso2.com/display/IS560/Writing+a+Custom+OAuth+2.0+Grant+Type
关于wso2 - 在 JWT Grant 中,如何将 JWT token 中包含的授权声明关联到与交换的访问 token 关联的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53882975/