如何解决如何在 wso2 apim 日志中显示调用特定 api 的用户的个人资料信息? 更新
我正在尝试配置 wso2 apim (4.0.0) 的网关访问日志,以便它应包含调用特定 api 的用户的个人资料信息(例如:组织、电子邮件)以及该 api 的所有者在日志文件。我按照对this similar question
的回答我想要的结构是:
用户名 | user_organization |被调用的api_name | api_owner | api_url |请求 |回复
欢迎任何帮助!
解决方法
通过使用以下属性,我们可以从自定义处理程序的消息上下文中提取 API Publisher
、Username
和 Tenant 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 举报,一经查实,本站将立刻删除。