PraseJwtToHeader插件

在入口网关配置了使用JWT进行身份认证或授权策略后,有时后续的服务需要在请求头中携带用户的身份信息。ParseJwtToHeader插件在启用后,能够根据配置信息,解析网关收到的JWT Payload中的对应字段并添加到转发请求的请求头当中。

重要

此插件需要在插件生效范围中选择网关生效并添加对应网关。请确保在field_mapping中配置的KeyJWT Payload中一定存在,否则此插件不会生效。在试用本插件前,请确保您至少已经完成ASM中对入口网关进行JWT请求鉴权中步骤一到步骤四搭建测试环境。

配置字段

名称

数据类型

填写要求

默认值

描述

issuer

string

必填

-

JWT的签发人。此项应与请求身份认证中配置的issuer字段保持一致。

field_mapping

string map

选填

{}

map的格式指定要解析的字段以及添加到请求头中的字段名:

  • key:需要解析的字段名。

  • value:添加到请求头时使用的字段名。

配置示例

开启插件

选择插件的生效范围为网关生效,并选择生效至网关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返回逻辑导致的,真实的请求头和您的输入保持一致)