【问题标题】:Can't find ClientAssertionCertificate in ASP.NET Core在 ASP.NET Core 中找不到 ClientAssertionCertificate
【发布时间】:2017-04-05 22:21:05
【问题描述】:

我有一个 ASP.NET Core 应用程序,我正在尝试使用证书从 AAD 获取访问令牌。我正在使用版本 3.13.5.907 的 Microsoft.IdentityModel.Clients.ActiveDirectory 程序集。但似乎 ClientAssertionCertificate 类已从该程序集中删除。接口IClientAssertionCertificate 可用,但我找不到任何实现它的类。

在 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);

这个类在 ASP.NET Core 中是否已被贬低,还是我遗漏了什么?

【问题讨论】:

标签: .net asp.net-core active-directory asp.net-core-1.0 adal


【解决方案1】:

我今天遇到了同样的问题;事实证明,编写自己的 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/

【讨论】:

【解决方案2】:

只是对现在看到此帖子的任何人的更新。这现在在最新的 .NETStandard 2.0 版本中可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2019-01-31
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多