试用阿里云API网关OpenID Connect中业务API使用JWT认证插件遇到的问题

一、缘由

近期试用阿里云API网关作为中转,开始时安全认证方式选择无认证。好快就能接通。

二、升级安全方式

再将安全认证方式调整为OpenID Connect,模式选择业务API。要求配置一个Token对应的参数名称,初时以为是token名,就随便起了个mytoken。

配置好之后,用postman请求,报错。

Status :400 Bad Request
X-Ca-Error-Code :I400JR
X-Ca-Error-Message : JWT required header:X-Token missing

提示比较明显,header缺少X-Token

这个X-Token又从哪里可以生成呢?文档里面有提到
https://help.aliyun.com/document_detail/177489.html?spm=a2c4g.11186623.6.592.12016a3aK0jUvR

关键内容:

用户可以在这个站点https://mkjwk.org 生成用于token生成与验证的私钥与公钥, 私钥用于授权服务签发JWT,公钥配置到JWT插件中用于API网关对请求验签,目前API网关支持的秘钥对的加密算法为RSA SHA256,秘钥对的加密的位数为2048。
在这里插入图片描述

创建JWT插件并绑定到API上面,但是问题来了,这个私钥(左1)直接填到程序中,jsonwebtoken无法使用json来做密钥,用JSON.stringify转换了一下,可以生成加密串,填到X-Token,报错。

Status :403 Forbidden
X-Ca-Error-Code :A403JK
X-Ca-Error-Message : No matching JWK, `<EMPTY>` not found

在这里插入图片描述
报错码相同,但是内容有些不同,感觉有个kid不知道要填在什么地方。研究了一段时间,终于发现是要填在jsonwebtoken,使用sign签名时的header配置里面。用postman请求,以为解决了,又有新的报错。

Status :403 Forbidden
X-Ca-Error-Code :A403JT
X-Ca-Error-Message : Invalid JWT: JWT processing failed. Additional details: [[17] Unable to process JOSE object (cause: org.jose4j.lang.InvalidKeyException: class sun.security.rsa.RSAPublicKeyImpl cannot be used for HMAC verification.): JsonWebSignature{"alg":"HS256","typ":"JWT","kid":"BRFpdhrViq2zaaaBEWZITz"}->eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik84ZnBkaHJWaXEyemFhYUJFV1pJVHoifQ.eyJ1c2VyIjoibGN3YWkiLCJwYXNzd29yZCI6Im1za3dpaXdxIzg5anVkamQiLCJpYXQiOjE2MTkzMzI5MDcsImV4cCI6MTYxOTQxOTMwN30.9NBLDCnxqkOBK0ZNrsPKROTnrU9v_QRtVwGWYhZjieQ]

在这里插入图片描述
弄了两天都解决不了,试了许多方法,都想放弃了。

最后发现在指明algorithm的类型和private_key.pem来加密。

在这里插入图片描述
令人向往的200码终于出现

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lcwai

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值