Azure MSI 强制令牌刷新

Posted

技术标签:

【中文标题】Azure MSI 强制令牌刷新【英文标题】:Azure MSI forced token refresh 【发布时间】:2020-03-18 22:41:23 【问题描述】:

我有长期运行的作业,它们使用 Azure MSI tokens 访问 ADLS Gen 2 存储。我遇到了 Azure 服务器端 token caching 问题。 这是我的设置:

    我从 Azure 请求用户管理标识的访问令牌,默认 TTL 为 8 小时。 然后为该令牌提供一个长时间运行的作业,假设该作业运行了 5 个小时并成功完成。 然后我的代码从 Azure IMDS 端点请求一个新令牌。 Azure,返回相同的访问令牌(现在有效 TTL 为 3 小时)。 此令牌提供给一个新的长时间运行的作业,该作业在 3 小时后失败。

我找不到任何有关如何强制刷新令牌的文档,因此当我请求第二个令牌时,它的到期时间是在第二个请求后 8 小时。事实上,我发现了一个blog,它说强制刷新是不可能的。

这看起来不对,应该有一种方法来强制刷新令牌(获取一个新的过期令牌)。有没有人遇到过这个问题,你是怎么解决的。

注意:运行作业的进程无法从 Azure 端点请求令牌。

【问题讨论】:

【参考方案1】:

根据docs,好像没有那个参数。

在token caching section 他们还提到:

只有在以下情况下才会产生对 Azure AD 的在线调用:

由于 Azure 资源子系统缓存的托管标识中没有令牌而发生缓存未命中

缓存的令牌已过期

【讨论】:

这是我目前的理解,有解决方法吗?即您可以强制清除托管身份的缓存吗? 在生产中也遇到了这个问题。无法强制刷新 MSI 令牌,并且在 prod 到期之前一直处于关闭状态...有没有办法刷新给定资源的 MSI 令牌?【参考方案2】:

我与 Azure MSI 团队取得了联系,并被告知这是平台限制,无能为力。令牌可以在到期前 5 分钟(创建时间后 7 小时 55 分钟)刷新。有人告诉我,几个月后我们应该能够在 2-3 小时后强制更新令牌。

【讨论】:

你有没有得到这方面的更新?尝试对此进行测试非常令人沮丧!谢谢 不幸的是,我没有,我不得不修改我的代码来处理这个:(

以上是关于Azure MSI 强制令牌刷新的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring boot keycloak 适配器 + spring security 强制更新 oAuth 令牌(访问令牌 + 刷新令牌)。?

带有 AdlsClient 的 Azure MSI:访问令牌已过期

我可以强制刷新 Databricks Delta 表,以便磁盘副本具有最新/一致的数据吗?

如何强制 WiX 引导程序下载 MSI 包?

如何强制Azure Active Directory身份验证服务重新发出带有更新声明的id_token?

使用服务安装 msi,如果凭据输入错误,是不是有办法强制安装程序重新提示用户