在ASM安全策略中配置JWT认证

当您需要在服务网格中进行身份验证和授权控制时,可以在ASM安全策略中配置JWT(JSON Web Token)认证,确保只有携带有效JWT的请求才能访问受保护的资源,提高服务间通信的安全性和隐私保护。

背景信息

JWT是一种常用的身份认证和鉴权机制。JWT中会携带一些用户信息和一个存储加密后信息的字段。将加密后的信息字段进行解密,与原始用户信息字段进行比较,可以验证该用户的信息是否有效,从而完成身份认证。

前提条件

操作步骤

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择网格安全中心 > ASM安全策略

  3. ASM安全策略页面,单击创建

  4. 创建ASM安全策略对话框,单击JWT认证,然后单击确定

    1. JWT认证配置配置向导,进行相关配置,然后单击下一步

      配置项

      配置示例

      ASM安全策略名称

      test-jwt

      认证规则

      Issuer

      testing@secure.istio.io

      JWKS来源

      jwks

      Key

      { "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}
    2. 工作负载和匹配规则配置向导,单击添加工作负载组。在新建工作负载组对话框,进行相关配置,单击确定,然后单击提交

      本示例配置如下。

      配置项

      说明

      工作负载组名称

      配置为test-policy

      工作负载列表

      1. 单击添加工作负载

      2. 添加工作负载对话框,选择网关生效

      3. 选择负载区域,选中目标负载,单击添加图标,将选中的负载添加到已选择区域,然后单击确定

      匹配规则列表

      匹配模式有以下两种:

      • 选中请求必须经过认证:请求必须携带正确的JWT,才能访问成功。

      • 选中请求可跳过认证:不携带JWT或者携带正确JWT的请求可以访问成功,携带错误的JWT的请求会访问失败。

      本示例匹配模式选择选中请求必须经过认证匹配规则选中自定义匹配规则,单击添加匹配规则,进行如下配置。

      • 规则1:打开HTTP路径(Path)开关,配置为/static/*

      • 规则2:打开HTTP路径(Path)开关,配置为/api/*

      image.png

      创建成功后,在完成配置向导,会显示ASM安全策略创建成功。您可以单击查看YAML查看创建的资源,也可以单击完成,返回ASM安全策略页面,查看新创建的安全策略。

  5. 验证JWT认证配置是否生效。

    1. 执行以下命令,进行访问测试。

      curl -I http://${网关地址}/productpage  # 返回200。
      curl -I http://${网关地址}/api/v1/products/1  # 返回403。
      curl -I http://${网关地址}/static/jquery.min.js  # 返回403。
      
      # 设置JWT。
      TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
      
      # 下面请求均返回200。
      curl -I http://${网关地址}/productpage -H "Authorization: Bearer $TOKEN"
      curl -I http://${网关地址}/api/v1/products/1 -H "Authorization: Bearer $TOKEN"
      curl -I http://${网关地址}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"

      按照上文的配置规则,以/api/static开头的请求必须携带正确的JWT,才能访问成功;以/productpage开头的请求不携带JWT或者携带正确的JWT,才能访问成功。访问结果与代码中注释一致,表明JWT认证配置生效。

    2. 修改JWT认证的配置规则。

      1. ASM安全策略页面的操作列,单击目标JWT认证安全策略对应的编辑

      2. JWT认证配置配置向导,单击下一步

      3. 工作负载和匹配规则配置向导的操作列,单击目标工作负载组对应的编辑

      4. 新建工作负载组对话框,修改相关配置,单击确定,然后单击提交

        本示例配置如下。

        配置项

        说明

        匹配模式

        选择选中请求可跳过认证

        匹配规则

        移除/api/*匹配规则,仅保留/static/*匹配规则。

        image.png

    3. 执行以下命令,验证修改后的JWT认证配置是否生效。

      curl -I http://${网关地址}/productpage  # 返回403。
      curl -I http://${网关地址}/api/v1/products/1  # 返回403。
      curl -I http://${网关地址}/static/jquery.min.js   # 返回200。
      
      # 设置JWT。
      TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
      
      # 下面请求均返回200。
      curl -I http://${网关地址}/productpage -H "Authorization: Bearer $TOKEN"
      curl -I http://${网关地址}/api/v1/products/1 -H "Authorization: Bearer $TOKEN"
      curl -I http://${网关地址}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"

      按照修改后的配置规则,以/static开头的请求不携带JWT或者携带正确的JWT,才能访问成功;其他请求必须携带正确的JWT,才能访问成功。访问结果与代码中注释一致,表明修改后的JWT认证配置生效。

相关文档