2015-09-02 20 views
6

ASP.NET 5 web uygulamasında oauth yetkilendirmesi yapmaya çalışıyorum. Bu yaklasimimizi denedim:ASP.NET 5'te Rsa imzalama kimlik bilgileri nasıl serileştirilir?

ASP.NET 5 OAuthBearerAuthentication: The following authentication scheme was not accepted: Bearer

Ve rsa tuşları daima başlangıçta oluşturulan görebileceğiniz gibi iyi çalışır, ancak. Diğer konularda deneyimlediğim ve gördüğüm gibi, RSACryptoServiceProvider.ToXmlString ve RSACryptoServiceProvider.FromXmlString, DNX Core'da bulunmuyor ve bir kez oluşturulmuş kimlik bilgilerimi serileştirmenin başka yollarını bulamadım. Bana bir yöntem gösterebilir misin?

Teşekkür

cevap

3

Projemi yalnızca ASP.NET Core RC2'ye yükselttim ve RSW anahtarımı (XML olarak saklanan) JWT jeton jenerasyonu için bir yapılandırma dosyasından okuduğum sırada bu soruna girdim.

ASP.NET 5 RC1 ile kullanmakta oldukları dosyaları değiştirmek için kendi yöntem uzantılarımı oluşturmayı bitirdim. İşte kod: RSACryptoServiceProvider Windows olmayan UWP okunur olduğundan

using System; 
using System.Security.Cryptography; 
using System.Xml; 

namespace RSACryptoServiceProviderExtensions 
{ 
    public static class RSACryptoServiceProviderExtensions 
    { 
     public static void FromXmlString(this RSACryptoServiceProvider rsa, string xmlString) 
     { 
      RSAParameters parameters = new RSAParameters(); 

      XmlDocument xmlDoc = new XmlDocument(); 
      xmlDoc.LoadXml(xmlString); 

      if (xmlDoc.DocumentElement.Name.Equals("RSAKeyValue")) 
      { 
       foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes) 
       { 
        switch (node.Name) 
        { 
         case "Modulus":  parameters.Modulus = Convert.FromBase64String(node.InnerText); break; 
         case "Exponent": parameters.Exponent = Convert.FromBase64String(node.InnerText); break; 
         case "P":   parameters.P =   Convert.FromBase64String(node.InnerText); break; 
         case "Q":   parameters.Q =   Convert.FromBase64String(node.InnerText); break; 
         case "DP":   parameters.DP =   Convert.FromBase64String(node.InnerText); break; 
         case "DQ":   parameters.DQ =   Convert.FromBase64String(node.InnerText); break; 
         case "InverseQ": parameters.InverseQ = Convert.FromBase64String(node.InnerText); break; 
         case "D":   parameters.D =   Convert.FromBase64String(node.InnerText); break; 
        } 
       } 
      } else 
      { 
       throw new Exception("Invalid XML RSA key."); 
      } 

      rsa.ImportParameters(parameters); 
     } 

     public static string ToXmlString(this RSACryptoServiceProvider rsa) 
     { 
      RSAParameters parameters = rsa.ExportParameters(true); 

      return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>", 
       Convert.ToBase64String(parameters.Modulus), 
       Convert.ToBase64String(parameters.Exponent), 
       Convert.ToBase64String(parameters.P), 
       Convert.ToBase64String(parameters.Q), 
       Convert.ToBase64String(parameters.DP), 
       Convert.ToBase64String(parameters.DQ), 
       Convert.ToBase64String(parameters.InverseQ), 
       Convert.ToBase64String(parameters.D)); 
     } 
    } 
} 
+0

rağmen, gerçekten, .NET Core sen RSACryptoServiceProvider' 'yerine RSA'' üzerinde çalışmalıdır. – bartonjs