在谷歌云函数python中生成JWT



我编写了一个脚本并将其上传到GCFunctions。现在,我的一个函数是使用PyJWT库为GCP API调用生成JWT,问题是每次运行函数时都会出现错误。当我将pyjwt添加到"requirements.txt"时,我得到了错误:"找不到算法RS256",然后我尝试添加密码学(pyjwt使用的加密库(,也尝试了pycrypto(用于RS256注册(,但仍然没有。如果能在这里得到帮助,我将不胜感激!甚至对GCP API调用中的其他身份验证方法的建议也会很棒!提前感谢

编辑:BTW-函数正在Python3.7 上运行

这是我的requirements.txt文件(依赖项(的内容

# Function dependencies, for example:
# package>=version
requests==2.21.0
pycrypto
pyjwt==1.7.1
pyjwt[crypto]
boto3==1.11.13

这是我在尝试添加pyjwt[crypto]并再次运行脚本时遇到的异常:在此处输入图像描述

找到了一种使其工作的方法。把它贴在这里给那些将来要面对它的人。。。我最终决定上传一个zip文件,其中包含代码文件+requirements.txt+服务帐户JSON凭据文件,并添加了以下库作为依赖项(到requirements.txt(:oauth2client、google-api-python客户端。

我是这样做的:

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
import logging
# set the service with the credentials
credentials = GoogleCredentials.from_stream("my_creds.json")
service = discovery.build('compute', 'v1', credentials=credentials)
# block errors printing for 'googleapicliet.discovery'
logging.getLogger('googleapicliet.discovery_cache').setLevel(logging.ERROR)
def main(event, context):
    # Project ID for this request.
    project = '<project_id>'  
    # The name of the zone for this request.
    zone = '<zone>'
    # Name of the instance resource to return.
    instance = '<instance-id>'
    request = service.instances().get(project=project, zone=zone, instance=instance)
    response = request.execute()
    # print only network details of the instance
    print("'{}' Network Details: {}".format(response['name'], response['networkInterfaces'][0]['accessConfigs'][0]))

根据PyJWT安装文档中的规定,如果您计划对JWT进行编码或解码,则应使用以下pip-install命令将其作为所需的额外命令与pyjwt:一起安装

pip install pyjwt[crypto]

或者在requirements.txt中添加pyjwt[crypto]作为新行。

如果您想使用GCP API,我建议您使用客户端库,因为在使用客户端库时,身份验证由库本身管理,否则不需要自己管理安全性。

在这里,谷歌建议避免对授权过程进行解释。而是使用propper客户端库。

相关内容

  • 没有找到相关文章

最新更新