使用正确未过期client secret提示无效、DevOps服务连接验证后令牌获取失败
问题根因
你操作Azure DevOps ARM服务连接的编辑、验证、保存流程时,Azure DevOps会自动触发对应绑定的Azure App Registration客户端密钥重置操作,直接覆盖/失效你此前通过az ad app credential reset生成的密钥,这就是你原有令牌获取逻辑失效的核心原因,和你确认的本地密钥正确性、编码逻辑均无关联。
具体触发逻辑
- 你通过az cli生成客户端密钥后,本地存储的是本次生成的有效密钥值,因此令牌请求可以正常执行
- 当你进入DevOps服务连接页面执行保存操作时,若该服务连接关联的是你手动配置的App Registration、且DevOps对该App Registration有管理权限,DevOps会自动为该应用生成全新的客户端密钥并更新到服务连接配置中,你原有本地存储的密钥会被直接失效,因此原有令牌请求逻辑报错
- 由于你操作时没有修改配置,所以你没有意识到密钥已经被DevOps自动替换了
解决方案
- 若需要同时在DevOps服务连接和其他场景使用同一个App Registration,不要随意触发DevOps服务连接的保存操作,仅做验证即可,验证通过后直接退出编辑页面不要保存
- 若必须执行服务连接的保存操作,操作完成后需进入Azure门户的App Registration「证书和密码」页面,复制DevOps新生成的密钥值更新到你本地的令牌获取逻辑中
- 更推荐的实践是为不同使用场景单独生成独立的客户端密钥,DevOps服务连接使用一个密钥,本地令牌获取逻辑使用另一个密钥,各自的生命周期独立管理,不会出现互相覆盖失效的问题
内容的提问来源于stack exchange,提问作者db_k
相关产品推荐
相关产品推荐

