AADSTS50012:从测试应用程序转移到生产环境时提供了无效的客户端密钥。

24
我在Azure Portal注册了两个应用程序:一个测试版本和一个生产版本。我的测试应用程序使用从Azure Portal测试应用程序详细信息中获取的客户端ID和客户端密钥/应用程序密钥正常工作。但是,当我转移到生产版本并将ClientId和Secret值替换为我注册的生产应用程序指定的值时,突然出现错误:
AdalServiceException:AADSTS70002:验证凭据时出错。 AADSTS50012:提供了无效的客户端密钥。
但是我非常确定我的客户端密钥是正确的,因为我只是从Portal中复制并粘贴。有解决方法吗?
8个回答

37

将您的秘密编码(例如,用%2B替换+,用%3D替换=等)


谢谢!我的网络应用程序停止工作了,尽管密钥仍然有效多年。使用额外的urlencode()函数解决了PHP库(https://github.com/jumbojett/OpenID-Connect-PHP)的问题。 - Yirkha
在加号和等号之前后的空格如何处理?我们需要使用百分号吗? - Incredible
1
我刚遇到了这个问题:需要强调的是,即使客户端密钥已经作为HTTP基本身份验证标头的一部分发送并且整个标头都将被base64编码,客户端密钥仍然需要进行url编码/%。 - bjmc
1
看起来这是一个URL编码问题。我一直在重新生成我的客户端密钥,直到我得到了一个大部分是基本的大写和小写字符的密钥。知道微软正在寻找的确切编码方式会很好。 - Christian Gossain
这真是救了我们的一天!我们在 AzureDataFactory 中遇到了困难,而 replace 帮了大忙。 - Prabhat G

14

你尝试过简单地重新生成密钥吗?

这里的错误非常明显,我认为这不是AAD的问题。

如果这个方法行得通,请让我知道!


1
我的问题是Azure门户中的密钥已过期。生成一个新的密钥并设置新的过期日期解决了这个问题。 - David
7
不确定这里是否已经暗示过,但我通过在“Azure活动目录”中为我的客户创建一个新的秘密密钥来修复了这个错误——而不是在Azure密钥保管库中创建一个密钥,这让我感到困惑。请前往Azure门户 > 活动目录 > 应用注册 > (您的应用程序)> 设置 > 密钥。我在这里的密钥已过期。 - GraehamF

8

这可能听起来很蠢,但正如我遇到的那样,也可能发生在其他人身上(像我一样无知的人):你需要使用的代码不是说“Secret ID”的那个,而是说“value”的那个。


是的,这就是我的情况,我很蠢:D - Vipertecpro
1
谢谢你的回答。虽然这并没有发生在我身上,但当另一家公司向我们发送应用程序注册信息时,我告诉我的同事们这是错误的,可是没有人相信我(因为还没有人尝试使用它,而且他们大多数都不懂技术)。这帮助我向他们证明了这个值是错误的。它不应该看起来像一个GUID!=] - AtheistP3ace

3
问题在于密钥的过期时间。 使用6、12、18个月没有问题,我正在使用azure-cli 2.26.0。 使用24个月会出现错误: {"error":"invalid_client","error_description":"AADSTS7000215: 提供了无效的客户端密钥。\r\nTrace ID: fef57aee-deeb-47fa-ae05-ba8427cd4300\r\nCorrelation ID: ba3cc2d5-1594-4af3-be2b-3b35e8d40e06\r\nTimestamp: 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"}。

1
在我的情况下,我有两个密钥。我创建了第三个密钥,但它没有起作用。最后我移除了所有的密钥并创建了一个新的,只有一个。这时它起作用了。

这是2022年唯一有效的解决方案,谢谢。 - Huzaifa
一样。这是一个 Microsoft 的 bug。 - Fnaxiom

1

也许这会帮助一些迷失的灵魂。

在项目开始时,我将我的秘密设置放在secrets.json中,但我忘记了。秘密过期后,我尝试更新appsettings.json,但无济于事,直到我想起并在secrets.json中更改它。这只是一个本地测试项目。您还可以将其放在env变量中,这也优先于appsettings


谢谢,我整个周末都在苦苦思索这个问题,而这就是解决方案。 - LlamaNL

0

我在使用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"'

-1
请检查您的配置文件中的租户 ID 和受众 ID。您可能仍然引用了测试环境。

租户 ID 与我使用的同一目录相同。而且我没有受众 ID,所以我认为那也不是问题。 - yfan183
如果您可以发布您的代码或一些截图,那么就更清楚地看到发生了什么。 - Toan Nguyen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接