gpt4 book ai didi

.net - 在 ASP.NET Core 中找不到 ClientAssertionCertificate

转载 作者:行者123 更新时间:2023-12-04 14:40:49 24 4
gpt4 key购买 nike

我有一个 ASP.NET Core 应用程序,我正在尝试使用证书从 AAD 获取访问 token 。我正在使用 Microsoft.IdentityModel.Clients.ActiveDirectory版本 3.13.5.907 的汇编。但似乎ClientAssertionCertificate类已从此程序集中删除。界面 IClientAssertionCertificate可用,但我找不到任何正在执行它的类。

在 ASP.NET 4.5 中,我曾经使用以下代码使用证书从 AAD 获取访问 token (Microsoft.IdentityModel.Clients.ActiveDirectory 版本 3.13.4.878 程序集)

var clientCredential = new ClientAssertionCertificate(_appId, _thumbprint);
var authenticationContext = new AuthenticationContext(authority, false);
var result = await authenticationContext.AcquireTokenAsync(resource, clientCredential);

此类在 ASP.NET Core 中是否已折旧,还是我遗漏了什么?

最佳答案

我今天遇到了同样的问题;事实证明,编写自己的 IClientAssertionCertificate 的具体实现非常容易

using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.IdentityModel.Tokens;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace app{

internal class ClientAssertionCertificate : IClientAssertionCertificate {

private X509Certificate2 certificate;
public string ClientId { get; private set; }

public string Thumbprint {
get {
return Base64UrlEncoder.Encode(certificate.GetCertHash());
}
}

public ClientAssertionCertificate(string clientId, X509Certificate2 certificate) {
ClientId = clientId;
this.certificate = certificate;
}

public byte[] Sign(string message) {
using (var key = certificate.GetRSAPrivateKey()) {
return key.SignData(Encoding.UTF8.GetBytes(message), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
}
}
}

除了引用包 Microsoft.IdentityModel.Clients.ActiveDirectory,您还需要添加包 Microsoft.IdentityModel.Tokens(用于 Base64UrlEncoder)

来源: https://blog.mastykarz.nl/azure-ad-app-only-access-token-using-certificate-dotnet-core/

关于.net - 在 ASP.NET Core 中找不到 ClientAssertionCertificate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40738521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com