一、引言
本文旨在阐述基于JWT声明的授权相关内容,介绍其配置方法以及如何进行测试应用等,帮助读者更好地理解在相关环境下利用JWT声明开展授权操作的具体情况。
二、基于JWT声明的授权概述
此任务为配置基于JWT声明的授权提供了操作指南。基于JWT声明的授权会在将请求路由到后端服务之前,检查传入请求是否具备所需的JWT声明。Envoy Gateway引入了一个名为SecurityPolicy的新自定义资源定义(CRD),用户可借此配置基于JWT声明的授权。这个实例化资源可以关联到Gateway、HTTPRoute或GRPCRoute资源。
三、配置环节
- 创建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
- 验证SecurityPolicy配置
使用“kubectl get securitypolicy/authorization-jwt-claim -o yaml”命令来验证SecurityPolicy配置。
四、测试环节
- 设置环境变量及准备有效JWT令牌
确保已设置来自快速入门(Quickstart,原文提及但未详细展开相关内容,此处按原文保留表述)的GATEWAY_HOST环境变量。若未设置,请按照快速入门说明来设置该变量。定义一个带有所需声明的JWT令牌,并进行解码验证其声明情况,示例中给出了有效JWT令牌“VALID_TOKEN”的赋值以及解码查看内容的操作,解码后的JWT令牌内容应类似如下展示情况(此处省略具体已列出的解码后的详细内容格式示例)。 - 使用有效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}/””,该请求应被允许,并且能看到来自后端服务的响应。 - 准备并验证无效JWT令牌
定义一个不具备所需声明的JWT令牌“INVALID_TOKEN”,同样进行解码验证其声明情况,解码后的JWT令牌内容应类似相应给出的展示情况(此处省略具体已列出的解码后的详细内容格式示例)。 - 使用无效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 token | JWT令牌 |
issuer | 颁发者(在JWT相关语境下常见释义) |
remoteJWKS | 远程JSON Web密钥集 |
defaultAction | 默认操作 |
authorization | 授权 |
principal | 主体(在相关授权等语境下常见释义) |
scope | 范围(在JWT声明等语境下常见释义) |
claims | 声明(在JWT相关语境下常见释义) |
valueType | 值类型 |
StringArray | 字符串数组 |