Python机器对机器用户级jwt身份验证与框

Posted

技术标签:

【中文标题】Python机器对机器用户级jwt身份验证与框【英文标题】:Python machine-to-machine user level jwt authentication with box 【发布时间】:2018-07-11 01:23:07 【问题描述】:

我的 Python 脚本需要每晚在无人看管的情况下将文件推送到 Box。我一直在阅读尽可能多的关于在 Python 中使用 Box 进行机器对机器用户级身份验证的工作,但我找不到任何在 Python 脚本中执行实际身份验证的示例。

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

Box 文档中有一段关于获取用户访问令牌 (JWT Authentication) 的建议性非常强的段落:

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

问题是,我找不到任何参考资料告诉我在拥有 JWT 后如何使用它。我很确定我打电话给https://api.box.com/oauth2/token,但是我如何用私钥对其进行签名,以及在 Python 中发送它的确切方法是什么?例如。我是用 pycurl 还是别的?

一旦我有了访问令牌,我就可以使用 OAuth2 进行身份验证,所以这部分没问题。我只是缺少中间那块。

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

【问题讨论】:

【参考方案1】:

您可以使用 JWTAUth 进行基于用户的身份验证。您无需调用 authenticate_instance,而是使用 authenticate_app_user。这是一个代码sn-p:

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

但是,您仍然需要为您的企业获得盒子管理员的授权。

【讨论】:

以上是关于Python机器对机器用户级jwt身份验证与框的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT - 以他们的电子邮件为主题对用户进行身份验证是不是可以?

使用特定机器对域进行身份验证?

使用 JwT 令牌身份验证对 HTTP Rest API 的 Python 发布请求会生成重复的帖子

使用 JWT Auth 对 LDAP 服务进行身份验证

如何使用 Socketio-jwt node.js 对用户进行身份验证

如何在 Python 中使用 JWT 实现基于角色的身份验证