在入口网关配置了使用JWT进行身份认证或授权策略后,有时后续的服务需要在请求头中携带用户的身份信息。ParseJwtToHeader
插件在启用后,能够根据配置信息,解析网关收到的JWT Payload中的对应字段并添加到转发请求的请求头当中。
重要
此插件需要在插件生效范围中选择网关生效并添加对应网关。请确保在field_mapping
中配置的Key在JWT Payload中一定存在,否则此插件不会生效。在试用本插件前,请确保您至少已经完成在ASM中对入口网关进行JWT请求鉴权中步骤一到步骤四搭建测试环境。
配置字段
名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
issuer | string | 必填 | - | JWT的签发人。此项应与请求身份认证中配置的issuer字段保持一致。 |
field_mapping | string map | 选填 | {} | 以map的格式指定要解析的字段以及添加到请求头中的字段名:
|
配置示例
开启插件
选择插件的生效范围为网关生效,并选择生效至网关ingressgateway
。 配置以下参数,使得插件能够解析JWT Payload中的name
字段。
issuer: testing@asm.test.io
field_mapping:
name: x-custom-user
打开生效开关。
测试结果
使用JWT工具,修改Payload如下,其他部分和参考文档步骤四中保持一致,获取JWT Token。
{
"iss": "testing@asm.test.io",
"name": "asm_test",
"admin": true,
"iat": 1516239022
}
在终端执行以下命令:
curl -H "Authorization: Bearer $TOKEN" http://{您的ASM网关地址}/headers
预期测试结果:
{
"headers": {
"Accept": "*/*",
"Host": "120.26.**.**",
"User-Agent": "curl/7.79.1",
"X-Custom-User": "asm_test",
"X-Envoy-Attempt-Count": "1",
"X-Envoy-Internal": "true",
"X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/default/sa/httpbin;Hash=***;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
}
}
可以看到httpbin接收到的请求头中包含了用户名信息。(您可能会注意到字段首字母转成了大写,无需担心,这是httpbin返回逻辑导致的,真实的请求头和您的输入保持一致)
文档内容是否对您有帮助?