JWT签名无效

时间:2017-07-18 10:35:40

标签: jwt kong

我在我的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"}

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您是否已将iss添加到JWT令牌有效负载中,如https://getkong.org/plugins/jwt/所述?

  

其次,声明必须在配置的声明中包含秘密密钥(来自config.key_claim_name)。该声明默认为iss(发行者字段)。将其值设置为我们先前创建的凭据密钥。索赔可能包含其他值。

{ 
  "iss": "a36c3049b36249a3c9f8891cb127243c"
}

答案 2 :(得分:0)

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

第1点的提示 另外,我在https://jwt.io/

中解密令牌时看到标头为空

第2点的提示 创建JWT凭证时,您需要提供其他信息,例如JWT算法,令牌验证密钥。步骤4。