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

问题描述

我正在使用 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 调用中我都调用上面的方法获取令牌。问题是有什么方法可以缓存这个令牌并自动刷新?这是内置的东西吗?

解决方法

遗憾的是,目前在 Azure 标识库中没有为 ManagedIdentityCredential 提供内置缓存。其他 SDK(例如 Azure 存储、KeyVault 等)在调用 getToken 时会在它们内部实现缓存。

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