如何使用Azure Python SDK获取ClientSecretCredential的令牌过期时间?
获取ClientSecretCredential令牌过期时间的方法
你可以通过以下两种方式获取令牌的过期时间:
方法一:主动调用get_token获取令牌并查看过期时间
ClientSecretCredential 提供了 get_token 方法可直接获取令牌对象,该对象包含 expires_on 属性(Unix时间戳格式),可转换为可读的日期时间格式。
from azure.identity import ClientSecretCredential from datetime import datetime # 补充必填的初始化参数 token_credential = ClientSecretCredential( tenant_id="你的租户ID", client_id="你的客户端ID", client_secret="你的客户端密钥" ) # 指定存储服务对应的scope,不同Azure服务需要调整scope值 token = token_credential.get_token("https://storage.azure.com/.default") # 转换为可读的日期时间格式 expires_datetime = datetime.fromtimestamp(token.expires_on) print(f"令牌过期时间:{expires_datetime}")
方法二:包装凭据类,拦截令牌获取过程
如果想在 BlobServiceClient 调用过程中自动记录令牌过期时间,可以自定义一个凭据包装类,重写 get_token 方法来输出过期时间。
from azure.identity import ClientSecretCredential from azure.storage.blob import BlobServiceClient from datetime import datetime class CredentialWithExpiryLogging(ClientSecretCredential): def get_token(self, *scopes, **kwargs): token = super().get_token(*scopes, **kwargs) expires_datetime = datetime.fromtimestamp(token.expires_on) print(f"当前令牌过期时间:{expires_datetime}") return token # 使用包装后的凭据实例 token_credential = CredentialWithExpiryLogging( tenant_id="你的租户ID", client_id="你的客户端ID", client_secret="你的客户端密钥" ) blob_service_client = BlobServiceClient(account_url="你的存储账户URL", credential=token_credential) # 调用BlobServiceClient的任意方法时,会自动触发令牌获取并打印过期时间 container_client = blob_service_client.get_container_client("你的容器名称") list(container_client.list_blobs())
注意事项
ClientSecretCredential初始化必须传入tenant_id、client_id、client_secret三个必填参数,你提供的代码中缺少这些参数,需要补充。- 不同Azure服务对应的scope不同,存储服务的scope为
https://storage.azure.com/.default,其他服务需参考官方文档调整。 - 凭据会自动缓存未过期的令牌,多次调用
get_token若令牌未过期,返回的是同一个令牌实例,过期时间不会变化。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

