如何延长python的CachingInteractiveBrowserCredential返回的Azure令牌的过期时间?



我正在编写一个桌面应用程序,以使用AD凭据连接到azure blob存储。

我在Azure AD中创建并配置了一个应用程序,可以连接并执行针对存储的操作:

from azure.storage.blob.blockblobservice import BlockBlobService
from azure.storage.common import TokenCredential
from azure.identity import InteractiveBrowserCredential
credential = TokenCredential(InteractiveBrowserCredential(...).get_token("https://storage.azure.com/user_impersonation").token)
blob_client = BlockBlobService(account_name="...", token_credential=credential)
for c in blob_client.list_containers():
print(c.name)

上面的代码弹出一个浏览器,在我执行身份验证后,控制权返回到执行代码,一切都很好。

问题是,获得的令牌在一小时内过期,这对最终用户来说是不可容忍的。

我考虑了两种选择,似乎都不可行:

  1. 延长了令牌的寿命(不太理想(-没有找到关于如何做到这一点的文档
  2. 使用刷新令牌获取新令牌。然而,没有返回刷新令牌(它在get_token方法中被丢弃(,即使我能够获得它,也不清楚如何将这个API与刷新令牌一起使用

如有任何帮助,我将不胜感激。

我使用的是python 3.7和azure存储blob 1.5.0。

完全免责声明,我是一个Python迷。但我看了一下源代码:https://github.com/Azure/azure-sdk-for-python/blob/ab56b7c4ff9dc6ffa6f248d9061af4b1b275ffe2/sdk/identity/azure-identity/azure/identity/_credentials/browser.py#L52.

如果您拨打:

InteractiveBrowserCredential(...).get_token("https://storage.azure.com/user_impersonation")

看起来它将首先检查缓存。如果它在那里找到了一个令牌,它就会返回。否则会弹出浏览器。

所以我想你可以在每次通话前打get_token。这样,如果需要,azure.identity将自动为您获取一个新的令牌。至少这是它在.NET端的工作方式。

最新更新