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