Azure:ServiceClientCredentials是否过期?能否复用该凭据实例?
Azure ServiceClientCredentials 有效期与复用问题
问题描述
使用以下代码获取Azure账户/订阅的ServiceClientCredentials实例:
var credentials = await ApplicationTokenProvider.LoginSilentAsync(_tenantId, _clientId, _clientSecret);
存在以下疑问:
- 这些凭据是否会过期?有没有办法知晓其有效期时长?
- 能否在内存中暂存该实例,在其“有效”期间重复使用?是否可行?
解答
1. 凭据过期情况与有效期查询
这类通过客户端密钥获取的ServiceClientCredentials是会过期的,默认Azure AD颁发的访问令牌有效期为1小时(3600秒),这个时长可以在Azure AD应用注册中调整(最长不超过24小时)。
要查看具体的有效期,可将凭据转换为TokenCredentials类型,读取令牌的过期时间:
if (credentials is TokenCredentials tokenCreds) { DateTimeOffset expirationTime = tokenCreds.Token.ExpiresOn; TimeSpan remainingValidTime = expirationTime - DateTimeOffset.UtcNow; // remainingValidTime 即为当前剩余有效时长 }
2. 凭据的暂存与复用
完全可以在内存中暂存该实例并重复使用,只要凭据处于有效期内,就无需每次操作前都调用LoginSilentAsync。这样做能减少对Azure AD的请求量,提升程序性能。
需要注意:
- 要处理凭据过期的场景:当检测到凭据即将过期或已过期时,重新调用
LoginSilentAsync获取新凭据替换旧的。 - 如果是多线程环境,要保证凭据更新时的线程安全,避免出现多线程同时刷新或使用过期凭据的问题。
内容的提问来源于stack exchange,提问作者Pure.Krome
相关产品推荐
相关产品推荐

