我正在尝试配置wso2 apim(4.0.0(的网关访问日志,以便它在日志文件中包含调用某个api的用户的配置文件信息(例如:组织、电子邮件(以及该api的所有者。我按照这个类似问题的答案
我想要的结构是:
username|user_organization|invoked_api_name|api_owner|api_url|请求|响应
欢迎任何帮助!
通过使用以下属性,我们可以从自定义处理程序的消息上下文中提取API Publisher
、Username
和Tenant Domain
。
api.ut.apiPublisher: API Publisher
api.ut.userId: Username
对自定义处理程序中的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 Management控制台配置一个额外的OpenID范围映射到
organization
声明。并使organization
声明成为每个服务提供商的强制性声明,以生成包括organization
声明的JWT接入令牌。当您试图生成令牌时,您必须通过我们为
organization
创建的OpenID范围,以便服务提供商评估并将声明包含在令牌中。一旦令牌通过Headers到达网关,捕获令牌并从中提取声明。或者,配置网关节点生成X-JWT-Assertion令牌并捕获该令牌并提取声明。
选项02:自定义处理程序以检索索赔
我们可以增强处理程序实现,从JWT访问令牌中提取用户名,然后调用一组具有所需属性的密钥管理器端点来检索用户声明。您可以检查密钥管理器连接器的实现,以查找检索用户声明的相对端点。
希望这次简报能帮助您选择一条道路。此外,我还添加了一些针对第二个选项的自定义处理程序实现的增强功能。