2

我在我的 Web 应用程序中使用 API 来获取数据和显示。我需要在访问数据库之前对 API 进行身份验证/授权,所以我使用 Kong API Gateway 来验证/授权请求(API)。我正在尝试创建Kong 中的 jwt 插件,但在使用 JWT 验证请求时获得无效签名。

如何修复无效签名错误?我在 Linux 服务器中使用 Kong 0.10.3(我没有使用 docker 或 AWS)。

代码:以下是我遵循的步骤:

Step 1.Created Kong API Route:
curl -X POST http://localhost:8001/apis/ \
   --data "name=Abc" \
   --data "uris=/API" \
   --data "upstream_url=http://*.*.*.*:1212" \
   --data "strip_uri=false"

Step 2.Created plugin
curl -X POST http://localhost:8001/apis/ABC/plugins \
    --data "name=jwt" 

Step 3.Created Consumer
curl -X POST http://localhost:8001/consumers \
    --data "username=xyz" 

Step 4.Created JWT credentials
curl -X POST http://localhost:8001/consumers/xyz/jwt -H "Content-Type: application/x-www-form-urlencoded"

Step 5.Send a request with the JWT(Using the JWT debugger at https://jwt.io)

curl http://localhost:8000/API/ABC?user=1 \
    -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI4OTg2MTgwZTQ0ZGQ0ODBmOGU5YzBlODQ3OTQyNDk1YSJ9.sIquZPSmkU8t9RVC8PSBqB8hbs2Th0IIOgphp2iWn2E'

{"message":"Invalid signature"}
4

4 回答 4

1

您是否已按照https://getkong.org/plugins/jwt/iss中的说明添加到您的 JWT 令牌负载中?

其次,声明必须包含已配置声明中的密钥(来自 config.key_claim_name)。默认情况下,该声明是 iss(颁发者字段)。将其值设置为我们之前创建的凭证的密钥。声明可能包含其他值。

{ 
  "iss": "a36c3049b36249a3c9f8891cb127243c"
}
于 2017-09-17T08:11:54.783 回答
1

我有一个类似的问题,我在一个 java 应用程序中生成 JSON Web 令牌,它与 kong 消费者具有相同的秘密,并将“iss”放在声明中,但 Kong 仍然给了我无效的签名消息。

在对https://jwt.io/进行一些测试以生成令牌后,我注意到 java 应用程序正在使用 base64 编码的秘密生成令牌,而 kong 正在等待不编码的秘密,因此将 config.secret_is_base64 = true 添加到 jwt插件解决了我的问题。

于 2021-04-01T15:34:26.903 回答
0

我知道你的问题已经解决到现在。但我为遇到此问题的任何人输入了我的解决方案。您应该将在消费者的 JWT 部分中创建的密钥作为创建令牌的值放在“iss”密钥中。我创建了一个图像来直观地描述它。请注意,“iss”是可配置的。

jwt 令牌

于 2021-08-26T17:40:18.130 回答
0

有两种可能。1) 令牌无效,即未正确生成。2) 令牌有效,但未使用正确的验证密钥验证令牌。

第 1 点的提示另外,当我在https://jwt.io/中解密令牌时,我看到标头为空

第 2 点提示 您需要在创建 JWT 凭证时提供额外信息,例如 JWT 算法、令牌验证密钥。第4步。

于 2020-06-16T21:19:13.097 回答