不同OAuth2授权类型下API Manager指标中用户名日志不一致问题
关于WSO2 APIM 4.4.0中不同授权类型下
apim_metrics.log用户名日志差异的问题解答 1. 这种基于grant_type的userName日志差异是否为预期行为?
是预期行为,这由WSO2 APIM默认的Claim映射规则和日志字段取值逻辑决定。
2. 底层原因是什么,尤其是在sub声明一致的情况下?
apim_metrics.log中的userName字段,是从OAuth2令牌对应主体的Subject Claim值读取的:
- 对于
password授权类型,默认配置下用户主体的Subject Claim映射到用户的UUID(对应Claim URI:http://wso2.org/claims/subject),因此日志会记录UUID格式的用户名。 - 对于
client_credentials授权类型,客户端主体的Subject Claim默认映射到客户端的用户名(对应Claim URI:username),因此日志会记录客户端的用户名(如test@carbon.super)。
你观察到两个令牌的sub声明一致,是因为WSO2生成令牌时会将Subject Claim的值作为sub字段输出。如果你的客户端和用户的Subject Claim值被配置为相同(比如客户端的Subject也映射到用户的UUID),就会出现sub一致但日志userName不同的情况——本质是两种授权类型对应不同的主体(用户/客户端),它们的默认Subject Claim映射规则不同。
3. 无需手动配置,如何确保日志记录一致的userName?
推荐通过全局配置统一Subject Claim映射,无需逐个修改服务提供者:
步骤1:修改APIM核心配置文件
打开<APIM_HOME>/repository/conf/deployment.toml,添加/修改以下配置:
# 配置用户主体的Subject Claim为用户名(password授权类型生效) [oauth.oidc] subject_claim_uri = "http://wso2.org/claims/username" # 配置客户端主体的Subject Claim为用户名(client_credentials授权类型生效) [oauth.client_credentials] subject_claim_uri = "http://wso2.org/claims/username"
如果希望客户端的userName记录客户端ID而非用户名,可以将第二个配置的subject_claim_uri改为client_id,根据实际需求调整。
步骤2:重启APIM服务
保存配置后,重启WSO2 APIM节点,新生成的令牌会按照统一规则生成Subject Claim,apim_metrics.log中的userName字段将保持一致。
内容的提问来源于stack exchange,提问作者Aee De
相关产品推荐
相关产品推荐

