如何缓存和刷新托管标识令牌

Posted

技术标签:

【中文标题】如何缓存和刷新托管标识令牌【英文标题】:how to cache and refresh managed identity token 【发布时间】:2021-10-03 11:02:48 【问题描述】:

我正在使用 azure 托管标识,下面的代码生成所需的令牌来验证 api。我正在使用<PackageReference Include="Azure.Identity" Version="1.4.0" />

var credential = new ManagedIdentityCredential();
            var accessToken = await credential.GetTokenAsync(new Azure.Core.TokenRequestContext(new[] "my_scope"));
            return accessToken.Token;

现在在每个 api 调用中,我调用上述方法来获取令牌。问题是缓存此令牌并自动刷新的方法是什么?这是内置的东西吗?

【问题讨论】:

【参考方案1】:

遗憾的是,Azure 身份库中没有针对今天可用的 ManagedIdentityCredential 的内置缓存。缓存是在其他 SDK(如 Azure 存储、KeyVault 等)调用 getToken 时实现的。

但是,您可能需要评估在运行您的代码的应用服务/功能/VM 上的托管身份端点中已经存在的令牌缓存是否足以满足您的目的。 它是一个本地端点,因此延迟可能会满足您的需求,即使您的代码中的本地缓存肯定会更快。而且您可能还想评估您的代码发出令牌请求的频率,因为我听说如果您在一秒钟内有太多请求,托管身份端点可能会限制这些请求。

【讨论】:

这是我的 API 调用案例的仪表板,一秒钟内不应该有太多的请求,所以在这里看起来不错。其他有趣的案例我还看到我有 20 个 api web 并且在启动期间我尝试从密钥库加载所有密钥,并且由于请求过多托管身份端点启动限制 :) 你知道任何解决方案吗?谢谢

以上是关于如何缓存和刷新托管标识令牌的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Pipelines 中使用托管标识:GetUserAccessToken:无法获取标识的访问令牌。 AAD 返回静默失败

在预认证用户的情况下如何使用 amazon cognito 获取刷新令牌

ASP .NET Web Api OAuth 刷新令牌过期时间

Oauth2/Openid 连接。如何撤销未知的访问/刷新令牌

访问令牌和刷新令牌最佳实践?如何实现访问和刷新令牌

如何在资源请求上重新生成刷新令牌和访问令牌?