Azure active directory AcquireTokenAsync获取响应状态代码不表示成功:401(未经授权)

Azure active directory AcquireTokenAsync获取响应状态代码不表示成功:401(未经授权),azure-active-directory,certificate,access-token,Azure Active Directory,Certificate,Access Token,作为ECR的一部分,我正在更改代码,通过使用主题名而不是aad第一方应用程序的指纹来获取令牌。 我做了一些改变: 1.我将主题名称添加到aad门户中的“主题名称+发行人”中。 2.将“sendX5c:true”参数添加到AcquireTokenAsync函数调用中 我正在从我的计算机获取证书,但当尝试获取令牌时,我得到以下异常:AADSTS7000213:无效证书链。内部异常为“响应状态代码不表示成功:401(未经授权)” 你知道我做错了什么或遗漏了什么吗 我跟随了这个链接:如果您想请求带有客户

作为ECR的一部分,我正在更改代码,通过使用主题名而不是aad第一方应用程序的指纹来获取令牌。 我做了一些改变: 1.我将主题名称添加到aad门户中的“主题名称+发行人”中。 2.将“sendX5c:true”参数添加到AcquireTokenAsync函数调用中

我正在从我的计算机获取证书,但当尝试获取令牌时,我得到以下异常:AADSTS7000213:无效证书链。内部异常为“响应状态代码不表示成功:401(未经授权)”

你知道我做错了什么或遗漏了什么吗


我跟随了这个链接:

如果您想请求带有客户端证书的Azure AD访问令牌,请参考以下步骤

  • 将证书信息上载到Azure

    a。获取信息

     $Thumbprint="930CFA423637129DB45921320B0BB451BD58A813"
    $cert=Get-ChildItem -Path Cert:\LocalMachine\My\$Thumbprint
    $rawCert = $cert.GetRawCertData()
    $base64Cert = [System.Convert]::ToBase64String($rawCert)
    $rawCertHash = $cert.GetCertHash()
    $base64CertHash = [System.Convert]::ToBase64String($rawCertHash)
    $KeyId = [System.Guid]::NewGuid().ToString()
    
    b。将上述信息上载到Azure


  • 有关更多详细信息,请参阅和Hi Tsur,请参阅下面我提供的解决方案。如果有帮助,请将其作为答案(单击“我的答案”旁边的复选标记,将其从灰显切换为填充)。提前谢谢。
          Connect-AzureAD
    
        $clientAadApplication=Get-AzureADApplication -Filter "AppId eq '<you client id>'"
    
        New-AzureADApplicationKeyCredential -ObjectId $clientAadApplication.ObjectId  -CustomKeyIdentifier "$base64CertHash"  -Type AsymmetricX509Cert -Usage Verify -Value $base64Cert
    
                  String subjectname="";
    
    
    
    
                    X509Store store = new X509Store(StoreName.My,StoreLocation.LocalMachine);
                    store.Open(OpenFlags.ReadOnly);
                    X509Certificate2Collection certCollection = store.Certificates;
    
                    X509Certificate2Collection currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
                    X509Certificate2Collection signingCert = currentCerts.Find(X509FindType.FindBySubjectName, subjectname, false);
                    X509Certificate2 cer = signingCert.OfType<X509Certificate2>().OrderByDescending(c => c.NotBefore).FirstOrDefault();
    
                    var app = ConfidentialClientApplicationBuilder.Create("<client id>")
                       .WithAuthority(AzureCloudInstance.AzurePublic, "<tenant id>")
                       .WithCertificate(cer)
                       .Build();
                    var result = await app.AcquireTokenForClient(new[] { "https://graph.microsoft.com/.default" }).ExecuteAsync();
                    Console.WriteLine(result.AccessToken);
                    Console.Read();