首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError: load_pem_private_key()缺少1个必需的位置参数:“backend”

TypeError: load_pem_private_key()缺少1个必需的位置参数:“backend”
EN

Stack Overflow用户
提问于 2021-02-01 12:47:43
回答 4查看 3.6K关注 0票数 6

我正在尝试用adobe API2.0提取adobe分析数据,我是个新手,所以在这个repo之后,我提供了所有的细节,比如APIKEY,techaccountID,org_id,client secret,修改后的config.ini。在生成JWT令牌时,我得到了下面的错误。

代码语言:javascript
运行
复制
TypeError: load_pem_private_key() missing 1 required positional argument: 'backend'

这是我的代码,

代码语言:javascript
运行
复制
def get_jwt_token(config):
    with open(config["key_path"], 'r') as file:
        private_key = file.read()

    return jwt.encode({
        "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=30),
        "iss": config["orgid"],
        "sub": config["technicalaccountid"],
        "https://{}/s/{}".format(config["imshost"], config["metascopes"]): True,
        "aud": "https://{}/c/{}".format(config["imshost"], config["apikey"])
    }, private_key, algorithm='RS256')


config = dict(config_parser["default"])
jwt_token = get_jwt_token(config)
logger.info("JWT Token: {}".format(jwt_token))
access_token = get_access_token(config, jwt_token)
logger.info("Access Token: {}".format(access_token))

下面是错误消息,

代码语言:javascript
运行
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-8c61bcf6ee58> in <module>
      1 config = dict(config_parser["default"])
----> 2 jwt_token = get_jwt_token(config)
      3 logger.info("JWT Token: {}".format(jwt_token))
      4 access_token = get_access_token(config, jwt_token)
      5 logger.info("Access Token: {}".format(access_token))

<ipython-input-3-d22e1d6f4ebb> in get_jwt_token(config)
      9         "https://{}/s/{}".format(config["imshost"], config["metascopes"]): True,
     10         "aud": "https://{}/c/{}".format(config["imshost"], config["apikey"])
---> 11     }, private_key, algorithm='RS256')

~\AppData\Local\Continuum\anaconda3\lib\site-packages\jwt\api_jwt.py in encode(self, payload, key, algorithm, headers, json_encoder)
     61         ).encode("utf-8")
     62 
---> 63         return api_jws.encode(json_payload, key, algorithm, headers, json_encoder)
     64 
     65     def decode_complete(

~\AppData\Local\Continuum\anaconda3\lib\site-packages\jwt\api_jws.py in encode(self, payload, key, algorithm, headers, json_encoder)
    108         try:
    109             alg_obj = self._algorithms[algorithm]
--> 110             key = alg_obj.prepare_key(key)
    111             signature = alg_obj.sign(signing_input, key)
    112 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\jwt\algorithms.py in prepare_key(self, key)
    248                         key = load_ssh_public_key(key)
    249                     else:
--> 250                         key = load_pem_private_key(key, password=None)
    251                 except ValueError:
    252                     key = load_pem_public_key(key)

TypeError: load_pem_private_key() missing 1 required positional argument: 'backend'

我尝试了本视频中指定的另一种方法,但该方法也导致了相同的错误https://www.youtube.com/watch?v=eSh2r3ZTCQU

我用谷歌搜索了一下,但是找不到答案。从错误中,我可以解释我应该提供一个参数backend,但是我应该在哪里提供它呢?谁能帮帮我这是怎么回事?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-02-03 17:53:30

我在jwt.decode上得到了同样的错误,但只在CI (linux)中,它在我的mac上工作。

请向python -m jwt.help查询您的加密版本是什么。>= 2需要密码学pyjwt 3,出于某种原因,它在CI中是2.9.2,所以这就解释了为什么它对我来说失败了。

已提交更新pyjwt[crypto]以要求有效加密包,但由于某些原因,它未显示在更改日志中,而且我通过手动将cryptography>=3.3.1,<4.0.0添加到requirements.txt修复了此问题

票数 8
EN

Stack Overflow用户

发布于 2021-11-04 21:35:03

尝试使用安装

代码语言:javascript
运行
复制
$ python3 -m pip install --upgrade pyjwt[crypto]
...
Note: you may need to restart the kernel to use updated packages.

然后重新启动IDE/终端。

票数 1
EN

Stack Overflow用户

发布于 2021-10-08 12:09:53

我也遇到过同样的错误,但是我的Raspberry Pi项目。我厌倦了谷歌云IoT核心的python示例。如果有人面临同样的问题,我会分享我的经验。

我尝试了pyjwt和密码术的不同版本组合,但问题仍然存在。

问题是,如果没有提供任何后端,pyjwt不设置默认后端。我已经在我的Mac上用Python3.9厌倦了这个例子,它起作用了。

但是Python3.9不能在Raspberry Pi上工作,因为有一些缺失的依赖项。所以我在我的Raspberry Pi上编译了Python 3.8.12,错误消失了。

这是一个编译Python的指南。

https://raspberrytips.com/install-latest-python-raspberry-pi/

请先安装这些库,否则pip将无法工作,因为缺少ssl模块。

代码语言:javascript
运行
复制
sudo apt install libssl-dev
sudo apt install libncurses5-dev
sudo apt install libsqlite3-dev
sudo apt install libreadline-dev
sudo apt install libtk8.6
sudo apt install libgdm-dev
sudo apt install libdb4o-cil-dev
sudo apt install libpcap-dev

我不知道是否所有的都是必要的,但它是有效的。

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65987293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档