如何在APIM中获取Basic Auth的用户名并存储为属性?
在WSO2 API Manager中获取Basic Auth用户名并保存为属性
当然可以实现,以下两种常用方法适用于APIM与Basic Auth的场景:
方法一:自定义中介解码提取用户名
Basic Auth的凭证是Base64编码的username:password格式,你可以在API的入流中介中添加脚本中介(JavaScript/Groovy)来解码并提取用户名,保存为自定义属性:
JavaScript中介示例
var authHeader = mc.getProperty('transport.headers.Authorization'); if (authHeader && authHeader.startsWith('Basic ')) { var encoded = authHeader.substring(6); var decoded = Packages.java.util.Base64.getDecoder().decode(encoded); var creds = new Packages.java.lang.String(decoded); var username = creds.split(':')[0]; mc.setProperty('custom.auth.username', username); }
提取完成后,custom.auth.username属性可在后续的中介逻辑、日志、路由策略中直接调用。
方法二:使用APIM内置认证属性
如果API已配置Basic Auth作为安全方案,APIM在认证通过后会自动将用户名存入内置属性,无需手动解码。常用的内置属性包括:
api.ut.userName:APIM新版本推荐使用的属性username:部分旧版本APIM使用的属性
你可以直接在中介流中引用这些属性,比如日志输出:
<log level="custom"> <property name="Authenticated User" expression="get-property('api.ut.userName')"/> </log>
注意事项
- 确保API的安全方案已启用Basic Auth,否则内置属性不会自动生成。
- 自定义中介提取时,建议添加异常处理(如格式校验、空值判断),避免因无效Auth头导致API流程中断。
- 保存的属性可用于限流规则、自定义业务逻辑、审计日志等场景。
内容的提问来源于stack exchange,提问作者Javier Decena
相关产品推荐
相关产品推荐

