跟我学EnvoyGataway:基于JWT声明ClaimBased的授权配置

一、引言

本文旨在阐述基于JWT声明的授权相关内容,介绍其配置方法以及如何进行测试应用等,帮助读者更好地理解在相关环境下利用JWT声明开展授权操作的具体情况。

二、基于JWT声明的授权概述

此任务为配置基于JWT声明的授权提供了操作指南。基于JWT声明的授权会在将请求路由到后端服务之前,检查传入请求是否具备所需的JWT声明。Envoy Gateway引入了一个名为SecurityPolicy的新自定义资源定义(CRD),用户可借此配置基于JWT声明的授权。这个实例化资源可以关联到Gateway、HTTPRoute或GRPCRoute资源。

三、配置环节
  1. 创建SecurityPolicy
    需要注意的是,基于JWT声明的授权要求请求中必须存在JWT令牌。必须在同一个SecurityPolicy中配置JWT认证,以验证JWT令牌并提取声明。
    以下SecurityPolicy配置允许带有有效JWT令牌且具备以下声明的请求:
    • “user.name”声明,其值为“John Doe”。
    • “user.roles”声明,其值为“admin”。
    • “scope”声明,其值为“read”、“add”和“modify”。
      从标准输入应用
cat <<EOF | kubectl apply -f -
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: SecurityPolicy
metadata:
  name: authorization-jwt-claim
spec:
  targetRefs:
  - group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: backend
  jwt:
    providers:
    - name: example
      issuer: https://foo.bar.com
      remoteJWKS:
        uri: https://raw.githubusercontent.com/envoyproxy/gateway/refs/heads/main/examples/kubernetes/jwt/jwks.json
  authorization:
    defaultAction: Deny
    rules:
    - name: "allow"
      action: Allow
      principal:
        jwt:
          provider: example
          scopes: ["read", "add", "modify"]
          claims:
          - name: user.name
            values: ["John Doe"]
          - name: user.roles
            valueType: StringArray
            values: ["admin"]
EOF
  1. 验证SecurityPolicy配置
    使用“kubectl get securitypolicy/authorization-jwt-claim -o yaml”命令来验证SecurityPolicy配置。
四、测试环节
  1. 设置环境变量及准备有效JWT令牌
    确保已设置来自快速入门(Quickstart,原文提及但未详细展开相关内容,此处按原文保留表述)的GATEWAY_HOST环境变量。若未设置,请按照快速入门说明来设置该变量。定义一个带有所需声明的JWT令牌,并进行解码验证其声明情况,示例中给出了有效JWT令牌“VALID_TOKEN”的赋值以及解码查看内容的操作,解码后的JWT令牌内容应类似如下展示情况(此处省略具体已列出的解码后的详细内容格式示例)。
  2. 使用有效JWT令牌发送请求测试
    使用有效JWT令牌向后端服务发送请求,命令为“curl -H “Host: www.example.com” -H “Authorization: Bearer V A L I D T O K E N " " h t t p : / / {VALID_TOKEN}" "http:// VALIDTOKEN""http://{GATEWAY_HOST}/””,该请求应被允许,并且能看到来自后端服务的响应。
  3. 准备并验证无效JWT令牌
    定义一个不具备所需声明的JWT令牌“INVALID_TOKEN”,同样进行解码验证其声明情况,解码后的JWT令牌内容应类似相应给出的展示情况(此处省略具体已列出的解码后的详细内容格式示例)。
  4. 使用无效JWT令牌发送请求测试
    使用无效JWT令牌向后端服务发送请求,命令为“curl -v -H “Host: www.example.com” -H “Authorization: Bearer I N V A L I D T O K E N " " h t t p : / / {INVALID_TOKEN}" "http:// INVALIDTOKEN""http://{GATEWAY_HOST}/””,该请求应被拒绝,并且会看到“403 Forbidden”的响应。
五、总结

通过上述对基于JWT声明的授权从配置到测试等一系列环节的介绍,我们可以清晰地看到整个操作流程及验证效果,这有助于在实际应用场景中准确地利用该授权机制来保障服务访问的合理性与安全性。

专业术语对应翻译
JWT Claim-Based Authorization基于JWT声明的授权
SecurityPolicy安全策略
CRD自定义资源定义
Gateway网关
JWT tokenJWT令牌
issuer颁发者(在JWT相关语境下常见释义)
remoteJWKS远程JSON Web密钥集
defaultAction默认操作
authorization授权
principal主体(在相关授权等语境下常见释义)
scope范围(在JWT声明等语境下常见释义)
claims声明(在JWT相关语境下常见释义)
valueType值类型
StringArray字符串数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值