修复:InvalidAlgorithmError:尝试在 Python 中解码编码的 jwt 令牌时不允许指定的 alg 值

Posted

技术标签:

【中文标题】修复:InvalidAlgorithmError:尝试在 Python 中解码编码的 jwt 令牌时不允许指定的 alg 值【英文标题】:Fix: InvalidAlgorithmError: The specified alg value is not allowed while trying to decode encoded jwt token in Python 【发布时间】:2020-03-07 03:39:44 【问题描述】:

我正在尝试解码从授权服务收到的令牌。问题是当我尝试解码时,我得到InvalidAlgorithmError: the specified alg value is not allowed

当您查看下面的图片时。我可以从 jwt.io 站点解码令牌并查看有效负载。

我正在使用PyJwt 库。您将在下面找到我的实现。

jwt.io 站点中的解码令牌

实施

import jwt 

    encoded = "eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3JvbGUiOiJERVZFTE9QRVIiLCJ1c2VyZnVsbG5hbWUiOiJFcmljIE0gS2FyaW1pIiwidXNlcm5hbWUiOiJlcmljIiwidXNlcmlkIjoiMjkiLCJleHAiOjE1NzM0ODE0MzIsImlzcyI6IkVyaWMiLCJhdWQiOiJSZWFkZXJzIn0.tTQckIZGYNHE667NXrxT4YwT4DNZ01u3P3b3IMFyWR4"

    key = "somekeyrequiredtodecode"

    decoded = jwt.decode(encoded,key, algorithms=['HS256'])  

全栈跟踪

~/Desktop/APIs/ncc-api/env/lib/python3.6/site-packages/jwt/api_jws.py in decode(self, jwt, key, verify, algorithms, options, **kwargs)
    154         elif verify_signature:
    155             self._verify_signature(payload, signing_input, header, signature,
--> 156                                    key, algorithms)
    157 
    158         return payload

~/Desktop/APIs/ncc-api/env/lib/python3.6/site-packages/jwt/api_jws.py in _verify_signature(self, payload, signing_input, header, signature, key, algorithms)
    214 
    215         if algorithms is not None and alg not in algorithms:
--> 216             raise InvalidAlgorithmError('The specified alg value is not allowed')
    217 
    218         try:

InvalidAlgorithmError: The specified alg value is not allowed

In [7]: v = jwt.decode(key, s, algorithms=['HS256'])                                                                                                                                                          
---------------------------------------------------------------------------
InvalidAlgorithmError                     Traceback (most recent call last)
<ipython-input-7-a9465dfcaa4b> in <module>
----> 1 v = jwt.decode(key, s, algorithms=['HS256'])

~/Desktop/APIs/ncc-api/env/lib/python3.6/site-packages/jwt/api_jwt.py in decode(self, jwt, key, verify, algorithms, options, **kwargs)
     90 
     91         decoded = super(PyJWT, self).decode(
---> 92             jwt, key=key, algorithms=algorithms, options=options, **kwargs
     93         )
     94 

~/Desktop/APIs/ncc-api/env/lib/python3.6/site-packages/jwt/api_jws.py in decode(self, jwt, key, verify, algorithms, options, **kwargs)
    154         elif verify_signature:
    155             self._verify_signature(payload, signing_input, header, signature,
--> 156                                    key, algorithms)
    157 
    158         return payload

~/Desktop/APIs/ncc-api/env/lib/python3.6/site-packages/jwt/api_jws.py in _verify_signature(self, payload, signing_input, header, signature, key, algorithms)
    214 
    215         if algorithms is not None and alg not in algorithms:
--> 216             raise InvalidAlgorithmError('The specified alg value is not allowed')
    217 
    218         try:
InvalidAlgorithmError: The specified alg value is not allowed

【问题讨论】:

【参考方案1】:

标头中指定的算法对库无效。如果要使用这些解码,则需要使用 "alg": "HS256" 对 JWT 进行编码。

您可以查看支持的算法:

from jwt.algorithms import get_default_algorithms

get_default_algorithms()

【讨论】:

get_default_algorithms() 函数列出的所有算法都没有帮助我。我仍然得到同样的错误。就我而言,我收到的令牌来自 AWS Cognito。任何帮助表示赞赏。【参考方案2】:

在某些(不推荐)情况下,您不需要验证签名。 如果是这种情况,请使用:

jwt.decode(encoded_str, options="verify_signature": False)

https://pyjwt.readthedocs.io/en/stable/usage.html#reading-the-claimset-without-validation

【讨论】:

以上是关于修复:InvalidAlgorithmError:尝试在 Python 中解码编码的 jwt 令牌时不允许指定的 alg 值的主要内容,如果未能解决你的问题,请参考以下文章

如何修复漏洞

Android Gradle 插件热修复实现 ① ( Android 热修复系统组成 | 热修复工作流程 | 热修复使用到的技术 | 热修复框架选择注意事项 )

Android Gradle 插件热修复实现 ① ( Android 热修复系统组成 | 热修复工作流程 | 热修复使用到的技术 | 热修复框架选择注意事项 )

电脑里的“HTTP协议”存在异常项,怎么修复?

电脑无法启动怎么办,出现启动修复但修复不了怎么办?

电脑总是出现关机倒计时怎么修复