微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 wso2 apim 日志中显示调用特定 api 的用户的个人资料信息? 更新

如何解决如何在 wso2 apim 日志中显示调用特定 api 的用户的个人资料信息? 更新

我正在尝试配置 wso2 apim (4.0.0) 的网关访问日志,以便它应包含调用特定 api 的用户的个人资料信息(例如:组织、电子邮件)以及该 api 的所有者在日志文件。我按照对this similar question

的回答

我想要的结构是:

用户名 | user_organization |被调用的api_name | api_owner | api_url |请求 |回复

欢迎任何帮助!

解决方法

通过使用以下属性,我们可以从自定义处理程序的消息上下文中提取 API PublisherUsernameTenant Domain

api.ut.apiPublisher: API Publisher
api.ut.userId: Username

Custom Handler 中的 handleRequestOutFlow(..) 方法执行以下增强以提取提到的数据

public boolean handleRequestOutFlow(..) {
    ...
    String username = (String) messageContext.getProperty("api.ut.userId");
    String apiCreator = (String) messageContext.getProperty("api.ut.apiPublisher");
    String apiContext = (String) messageContext.getProperty("api.ut.context");
    String tenantDomain = MultitenantUtils.getTenantDomainFromRequestURL(apiContext);
    if (tenantDomain == null) {
        tenantDomain = org.wso2.carbon.utils.multitenancy.MultitenantConstants.SUPER_TENANT_DOMAIN_NAME;
    }
    ...
}

更新

如果您想通过自定义处理程序记录用户的 organization,那么我可以想到两个选项来实现该要求。

  • 选项 01:配置 OpenID 范围

    如果您只有少数应用程序需要此功能,则此选项适用。

    通过 Carbon 管理控制台配置一个额外的 OpenID 范围映射到 organization 声明。并使 organization 声明成为每个服务提供商的强制性声明,以生成包含 organization 声明的 JWT 访问令牌。

    当您尝试生成令牌时,您必须传递我们为 organization 创建的 OpenID 范围,以便服务提供商评估并将声明包含在令牌中。

    一旦令牌通过标头到达网关,捕获令牌并从中提取声明。否则,配置网关节点以生成 X-JWT-Assertion 令牌并捕获该令牌并提取声明。

  • 选项 02:自定义处理程序以检索声明

    我们可以增强 Handler 实现以从 JWT 访问令牌中提取用户名,然后调用一组具有所需属性的密钥管理器端点来检索用户声明。您可以检查 Key Manager connector implementation 以查找相关端点以检索用户声明。

希望这份简报能帮助您选择一条道路。此外,我还针对 custom handler 实现添加了一些增强功能,重点是第二个选项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?