运行中Azure逻辑应用引用旧密钥保管库值的自动化处理问询
逻辑应用密钥更新后的自动化处理方案
问题背景
更新AAD客户端密钥及密钥保管库中的对应值后,已启动的逻辑应用实例仍使用启动时缓存的旧密钥,访问应用时返回错误:
BadRequest. Http request failed as there is an error getting AD OAuth token: 'AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID'
手动终止并重启运行实例可解决问题,但可通过以下自动化方式避免手动操作:
一、让运行中实例自动获取最新密钥的方案
- 动态实时获取密钥:若逻辑应用通过托管标识访问密钥保管库,需将密钥引用改为实时动态获取——不在逻辑应用启动时一次性拉取密钥,而是在每次需要使用密钥的步骤(如获取OAuth令牌的动作)中,调用密钥保管库的
Get Secret动作拉取最新值。这种方式能确保每次请求都使用密钥保管库中的当前最新密钥,避免缓存旧值。 - 密钥更新触发实例重启:创建辅助逻辑应用,利用密钥保管库的
Secret New Version Created触发器,当密钥有新版本时,自动终止目标逻辑应用的所有运行实例,并触发新的运行。此方案可实现密钥更新后自动切换到使用新密钥的实例。
二、配置遇错时自动重试获取最新密钥
- 添加自定义错误处理分支:
- 将需要使用密钥的HTTP请求动作(如获取OAuth令牌)放入「范围」容器内。
- 为该「范围」添加「捕获」错误处理,指定捕获包含
AADSTS7000215的错误。 - 在捕获分支中,调用密钥保管库的
Get Secret动作重新获取最新密钥。 - 用新获取的密钥更新HTTP请求参数,然后重试「范围」内的原动作。
- 结合自定义重试策略:对获取令牌的HTTP请求动作设置自定义重试规则,指定在遇到
400 Bad Request且包含目标错误码时,先执行刷新密钥的步骤再重试,确保错误发生时能自动尝试使用最新密钥。
内容的提问来源于stack exchange,提问作者Prolific222
相关产品推荐
相关产品推荐

