应用服务网格 ASM-在ASM中对入口网关进行JWT请求认证:验证JWT认证是否生效

时间:2024-06-21 16:58:18

验证JWT认证是否生效

  1. 使用JWT工具将JWT请求信息编码成JWT Token。

    在“Decoded”区域输入以下JWT请求信息,在“Encode”区域将看到自动转换后的JWT Token。

    • HEADER:设置alg为“RS512”,输入1创建的JWK中的kid,设置type为“JWT”。
    • PAYLOAD:设置iss为“test”,aud为“ASM”,确保与2中配置的发行者、令牌受众保持一致。
    • VERIFY SIGNATURE:与1.a中的公钥保持一致。
    图4 创建JWT Token

  2. 通过入口网关访问httpbin服务。

    1. 执行以下命令,带1创建的JWT Token访问服务。

      TOKEN=1创建的JWT Token

      curl -I -H "Authorization: Bearer $TOKEN" http://{httpbin服务的外部访问地址}/

      预期输出:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Wed, 21 Sep 2022 03:11:48 GMT
    2. 执行以下命令,带无效的JWT Token访问服务。

      curl -I -H "Authorization: Bearer invalidToken" http://{httpbin服务的外部访问地址}/

      预期输出:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://***.***.***.***:***/", error="invalid_token"
      content-length: 145
      content-type: text/plain
      date: Wed, 21 Sep 2022 03:12:54 GMT
      server: istio-envoy
      x-envoy-upstream-service-time: 19
    3. 修改2中创建的JWT认证,将令牌受众置空(表示对访问的服务不受限制),然后执行以下命令,带1创建的JWT Token访问服务。

      curl -I -H "Authorization: Bearer $TOKEN" http://{httpbin服务的外部访问地址}/

      预期输出:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Wed, 21 Sep 2022 03:20:07 GMT
    4. 执行以下命令,不带JWT Token访问服务。

      curl -I http://{httpbin服务的外部访问地址}/

      预期输出:

      HTTP/1.1 403 Forbidden
      content-length: 85
      content-type: text/plain
      date: Wed, 21 Sep 2022 03:29:31 GMT
      server: istio-envoy
      x-envoy-upstream-service-time: 6

    根据以上结果,可以看到带有正确的JWT Token的请求访问服务成功,带有错误的JWT Token或者不带JWT Token的请求访问服务失败,说明请求身份认证生效。

support.huaweicloud.com/usermanual-asm/asm_01_0097.html