在 ASP.NET 核心中找不到 ClientAssertionCertificate
Can't find ClientAssertionCertificate in ASP.NET Core
我有一个 ASP.NET 核心应用程序,我正在尝试使用证书从 AAD 获取访问令牌。我正在使用 3.13.5.907 版的 Microsoft.IdentityModel.Clients.ActiveDirectory
程序集。但似乎 ClientAssertionCertificate
class 已从此程序集中删除。接口 IClientAssertionCertificate
可用,但我找不到任何正在实现它的 class。
在 ASP.NET 4.5 中,我曾经使用以下代码使用证书从 AAD 获取访问令牌(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);
这个 class 在 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/
只是更新给现在看到这个 post 的人。现在在最新的 .NETStandard 2.0 版本中可用。
我有一个 ASP.NET 核心应用程序,我正在尝试使用证书从 AAD 获取访问令牌。我正在使用 3.13.5.907 版的 Microsoft.IdentityModel.Clients.ActiveDirectory
程序集。但似乎 ClientAssertionCertificate
class 已从此程序集中删除。接口 IClientAssertionCertificate
可用,但我找不到任何正在实现它的 class。
在 ASP.NET 4.5 中,我曾经使用以下代码使用证书从 AAD 获取访问令牌(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);
这个 class 在 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/
只是更新给现在看到这个 post 的人。现在在最新的 .NETStandard 2.0 版本中可用。