使用框

时间:2018-01-31 20:02:35

标签: python python-3.x authentication jwt

我的Python脚本需要每天晚上无人值守地将文件推送到Box。我一直在阅读有关如何使用Python中的Box进行机器到机器用户级身份验证的工作,但我找不到任何在Python脚本中执行实际身份验证的示例。

我在这里找到了如何编码Box所需的JWT有效负载:JWT Claims。但是,一旦我拥有它,我该如何使用这个JWT?

Box文档中有一个关于获取用户访问令牌(JWT Authentication)的非常具有暗示性的段落:

  

您的服务将通过向包含JSON有效内容的/ token端点发送JSON Web令牌向Box进行身份验证,该有效负载包括客户端ID,enterprise_id或user_id以及其他声明,并使用RSA密钥对的私钥对其进行签名。 Box然后使用特定于您的应用程序的公钥来验证您的应用程序的身份。

问题是,我找不到任何参考资料,告诉我如何使用JWT。我很确定我会调用https://api.box.com/oauth2/token,但是如何使用私钥对其进行签名,以及在Python中发送它的确切方法是什么?例如。我使用pycurl或其他东西吗?

一旦我拥有访问令牌,我就可以使用OAuth2进行身份验证,因此该部分可以正常使用。中间只有那件我错过了。

请注意我需要获取用户令牌,而不是企业级令牌,因此JWTAuth对我不起作用。

1 个答案:

答案 0 :(得分:1)

您可以使用JWTAUth进行基于用户的身份验证。您可以使用authenticate_app_user,而不是调用authenticate_instance。这是一段代码:

from boxsdk import JWTAuth, Client

auth = JWTAuth(
    client_id='CLIENT ID HERE',
    client_secret='CLIENT SECRET HERE',
    enterprise_id='USER_ID HERE',
    jwt_key_id='JWT KEY HERE',
    rsa_private_key_file_sys_path='PATH/TO/FILE',
    rsa_private_key_passphrase=b'PASSPHRASE HERE'
)
access_token = auth.authenticate_app_user(type('',(object,),{"object_id": "USER_ID HERE"})())
client = Client(auth)
# ... etc

但是,您仍然需要为您的企业提供由管理员授权的应用程序。