wso2 - 在 JWT Grant 中,如何将 JWT token 中包含的授权声明关联到与交换的访问 token 关联的范围?

标签 wso2 wso2-api-manager

这是我完成此集成所需的最后一部分:

  • 我有一个生成 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]。

[1] https://github.com/wso2/carbon-apimgt/blob/6.x/components/apimgt/org.wso2.carbon.apimgt.keymgt/src/main/java/org/wso2/carbon/apimgt/keymgt/handlers/ExtendedSAML2BearerGrantHandler.java

[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/

相关文章:

templates - WSO2 API Publisher 中的 URI 模板

wso2 - 使用 WSO2 ESB 进行热部署

java - WSO2 ESB 无法调用 ActiveMQ

wso2 - 如何在 WSO2 API Manager 1.10 中集成第三方计费引擎?

wso2 - 使用 XACML 启用基于角色的访问控制 - 评估策略时发生错误

WSO2 分析数据源

wso2 - WSO2 身份服务器上 Scim2 的 Swagger 定义在哪里

wso2 - 无法通过反向代理访问 WSO2 EMM 商店和发布者

wso2 - 配置 WSO2 STATS_DB

wso2-api-manager - wso2 在没有 token 的情况下调用 API