我在Azure门户下注册了两个应用程序:测试版本和生产版本。我的测试应用程序与我从 Azure 门户的测试应用程序详细信息中获取的客户端 ID 和 ClientSecret/AppKey 配合得很好。然而,当我转移到生产应用程序并将 ClientId 和 Secret 值替换为我注册的生产应用程序指定的值时,我突然收到一个错误:
AdalServiceException:AADSTS70002:验证凭据时出错。 AADSTS50012:提供的客户端密钥无效
但我相当确定我的客户端密钥是正确的,因为我刚刚从门户复制并粘贴了该密钥。有什么办法解决这个问题吗?
对您的秘密进行编码(例如,将
+
替换为 %2B
,将 =
替换为 %3D
等)
您是否尝试过简单地重新生成秘密?
这里的错误非常简单,我不认为这是 AAD 的错误。
让我知道这是否适合您!
这听起来可能很愚蠢,但正如它发生在我身上一样,它也可能发生在其他人身上(像我一样无能): 您需要使用的代码不是标有 “秘密 ID” 的代码,而是标有 “值” 的代码。
问题是秘密的过期时间。 用6、12、18个月都没有问题,我用的是azure-cli 2.26.0 24 个月后你会得到错误:
{“error”:“invalid_client”,“error_description”:“AADSTS7000215:提供了无效的客户端密钥。 跟踪 ID:fef57aee-deeb-47fa-ae05-ba8427cd4300 相关 ID:ba3cc2d5-1594-4af3-be2b-3b35e8d40e06 时间戳: 2021-10-23 18:18:27Z","error_codes":[7000215],"timestamp":"2021-10-23 18:18:27Z","trace_id":"fef57aee-deeb-47fa- ae05-ba8427cd4300","correlation_id":"ba3cc2d5-1594-4af3-be2b-3b35e8d40e06","error_uri":"https://login.microsoftonline.com/error?code=7000215"}
就我而言,我有两把钥匙。我创建了第三个,但没有用。最后,我删除了所有密钥并创建了一个新密钥,但是,只有一个。然后就成功了。
也许这会帮助一些迷失的灵魂。
我在项目开始时在
secrets.json
中进行了秘密设置,但我忘记了。秘密过期后,我尝试更新appsettings.json
无济于事,直到我想起来并在secrets.json
中更改它。这是一个仅在本地运行的测试项目。您也可以将其放在 env
变量中,该变量也优先于 appsettings
。
我在使用 Azure DevOps 将 docker 映像部署到 Azure 上的虚拟机时遇到了此问题。
我最初的 Azure DevOps 管道脚本是:
- stage: Deploy
displayName: Deploy to VM
jobs:
- job: Deploy_to_VM
displayName: Deploy to Virtual Machine
steps:
- task: AzureCLI@2
displayName: Connect to Azure and deploy
inputs:
azureSubscription: $(AzureSubscription)
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: 'az vm run-command invoke -g $(rGroup) -n $(vmName) --command-id RunShellScript --scripts "docker pull $(containerRegistry).azurecr.io/$(imageName):$(tag) && docker service update --replicas=1 --force --image $(containerRegistry).azurecr.io/$(imageName):$(tag) $(imageName)_app"'
这是我修复它的方法:
将命令
az acr login --name $(containerRegistry)
添加到 az vm run-command
就可以了`
- stage: Deploy
displayName: Deploy to VM
jobs:
- job: Deploy_to_VM
displayName: Deploy to Virtual Machine
steps:
- task: AzureCLI@2
displayName: Connect to Azure and deploy
inputs:
azureSubscription: $(AzureSubscription)
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: 'az vm run-command invoke -g $(rGroup) -n $(vmName) --command-id RunShellScript --scripts "az acr login --name $(containerRegistry) && docker pull $(containerRegistry).azurecr.io/$(imageName):$(tag) && docker service update --replicas=1 --force --image $(containerRegistry).azurecr.io/$(imageName):$(tag) $(imageName)_app"'
确保没有名为 AzureAD__ClientSecret 的环境变量。由于环境变量优先于机密,因此更改机密不会产生任何影响。
切换到新项目后发生在我身上。
请检查您的配置中的租户 ID 和受众 ID。您可能仍然对测试环境有参考。