跳到主要内容

jwe-decrypt

jwe-decrypt 插件解密发送到 APISIX 路由服务的请求中的 JWE 授权头。

示例

以下示例演示了如何在不同场景下使用 jwe-decrypt 插件。

暴露 JWE 加密端点并生成 JWE Token

以下示例演示了如何暴露 JWE 加密端点并生成 JWE Token。

jwe-decrypt 插件在 /apisix/plugin/jwe/encrypt 创建一个内部端点来加密 JWE。使用 public-api 插件暴露该端点:

curl "http://127.0.0.1:9180/apisix/admin/routes/jwe-encrypt-api" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"uri": "/apisix/plugin/jwe/encrypt",
"plugins": {
"public-api": {}
}
}'

创建一个启用 jwe-decrypt 的 Consumer 并配置解密密钥:

curl "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"username": "jack",
"plugins": {
"jwe-decrypt": {
"key": "jack-key",
"secret": "key-length-should-be-32-chars123"
}
}
}'

使用 Consumer Key 发送请求到加密端点,以加密 Payload 中的一些示例数据:

curl "http://127.0.0.1:9080/apisix/plugin/jwe/encrypt?key=jack-key" \
-d 'payload={"uid":10000,"uname":"test"}' -G

你应该看到类似于以下的响应,响应体中包含 JWE 加密数据:

eyJraWQiOiJqYWNrLWtleSIsImFsZyI6ImRpciIsImVuYyI6IkEyNTZHQ00ifQ..MTIzNDU2Nzg5MDEy.IUFW_q4igO_wvf63i-3VwV0MEetPL9C20tlgcQ.fveViMUi0ijJlQ19D7kDrg

使用 JWE 解密数据

以下示例演示了如何解密之前生成的 JWE Token。

创建一个启用 jwe-decrypt 的路由以解密 Authorization 头:

curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "jwe-decrypt-route",
"uri": "/anything/jwe",
"plugins": {
"jwe-decrypt": {
"header": "Authorization",
"forward_header": "Authorization"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

Authorization 头中携带 JWE 加密数据向路由发送请求:

curl "http://127.0.0.1:9080/anything/jwe" -H 'Authorization: eyJraWQiOiJqYWNrLWtleSIsImFsZyI6ImRpciIsImVuYyI6IkEyNTZHQ00ifQ..MTIzNDU2Nzg5MDEy.IUFW_q4igO_wvf63i-3VwV0MEetPL9C20tlgcQ.fveViMUi0ijJlQ19D7kDrg'

你应该看到类似于以下的响应,其中 Authorization 头显示了 Payload 的明文:

{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Authorization": "{\"uid\":10000,\"uname\":\"test\"}",
"Host": "127.0.0.1",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-6510f2c3-1586ec011a22b5094dbe1896",
"X-Forwarded-Host": "127.0.0.1"
},
"json": null,
"method": "GET",
"origin": "127.0.0.1, 119.143.79.94",
"url": "http://127.0.0.1/anything/jwe"
}