2016-11-22 81 views
3

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

在ASP.NET 4.5我用下面的代码获得使用证书从AAD访问凭证(3.13.4.878版本Microsoft.IdentityModel.Clients.ActiveDirectory组装)

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

已该类在ASP.NET核心贬值了或者我错过了什么?

+1

未执行:https://github.com/aspnet/Security/issues/701 – Tratcher

+1

即将推出:https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/issues/598 –

回答

3

今天我有同样的问题;原来,这是很容易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

谢谢为了这。此实现也适用于Mono,解决了AAD/KeyVault的问题https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/issues/509 –

1

只是一个更新的人现在看到这个帖子。现在可以使用最新的.NETStandard 2.0版本。