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 表,以便磁盘副本具有最新/一致的数据吗?