2016-07-06 11 views
11

का उपयोग कर टोकन जेनरेट करने का प्रयास करने में त्रुटि मैं टोकन उत्पन्न करने के लिए पैकेज सिस्टम का उपयोग करने की कोशिश कर रहा हूं। IdentityModel.Tokens.Jwt। मुझे कुछ कोड नमूने ऑनलाइन मिले, बहुत सरल थे, लेकिन फिर मैं एक त्रुटि में भाग रहा हूं जिसे मैं समझ नहीं सकता।.NET JWT लाइब्रेरी

: (वर टोकन = tokenHandler.CreateToken (tokenDescriptor))

<%@ Application Language="C#" %> 
<%@ Import Namespace="System" %> 
<%@ Import Namespace="System.Text" %> 
<%@ Import Namespace="System.Reflection" %> 
<%@ Import Namespace="System.Collections" %> 
<%@ Import Namespace="System.IdentityModel.Tokens" %> 
<%@ Import Namespace="System.IdentityModel.Tokens.Jwt" %> 
<%@ Import Namespace="System.Security.Claims" %> 
<%@ Import Namespace="System.IdentityModel.Protocols.WSTrust" %> 

<script runat="server"> 
    public class TestClass 
    { 
     public static string GetJwtToken() 
     { 
      var tokenHandler = new JwtSecurityTokenHandler(); 
      var input = "anyoldrandomtext"; 
      var securityKey = new byte[input.Length * sizeof(char)]; 
      Buffer.BlockCopy(input.ToCharArray(), 0, securityKey, 0, securityKey.Length); 
      var now = DateTime.UtcNow; 
      var tokenDescriptor = new SecurityTokenDescriptor 
      { 
       Subject = new ClaimsIdentity(new[] 
       { 
       new Claim(ClaimTypes.UserData, 
       "IsValid", ClaimValueTypes.String, "(local)") 
       }), 
       TokenIssuerName = "self", 
       AppliesToAddress = "https://www.mywebsite.com", 
       Lifetime = new Lifetime(now, now.AddMinutes(60)), 
       SigningCredentials = new SigningCredentials(new InMemorySymmetricSecurityKey(securityKey), 
        "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256", 
        "http://www.w3.org/2001/04/xmlenc#sha256"), 
      }; 

      var token = tokenHandler.CreateToken(tokenDescriptor); 
      var tokenString = tokenHandler.WriteToken(token); 

      return tokenString; 
     } 
    } 
</script> 

मैं लाइन 113 पर निम्न त्रुटि मिलती रहती है: यहाँ कोड मैं उपयोग कर रहा हूँ (संक्षिप्तता के लिए थोड़ा संशोधित किया गया है) है तर्क 1: 'Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor'

करने के लिए 'System.IdentityModel.Tokens.SecurityTokenDescriptor' से परिवर्तित नहीं कर सकते लेकिन मैं काम करने बिल्कुल के रूप में मैं उन्हें किया है ऑनलाइन कई उदाहरण देखा है।

WIF 3.5 में, WIF कक्षाओं के सभी Microsoft.IdentityModel विधानसभा (microsoft.identitymicrosoft.identitymodel.dll) में निहित गया: मैं भी इस लेख (https://msdn.microsoft.com/en-us/library/jj157089(v=vs.110).aspx) निम्नलिखित कहा गया है कि में फंस गयी। डब्ल्यूआईएफ 4.5 में, डब्ल्यूआईएफ कक्षाओं को निम्नलिखित असेंबली में विभाजित किया गया है: mscorlib (mscorlib.dll), System.IdentityModel (System.IdentityModel.dll), सिस्टम। इंडेंटिटीमोडेल। सर्विसेज (System.IdentityModel.Services.dll) , और सिस्टम.ServiceModel (System.ServiceModel.dll)।

डब्ल्यूआईएफ 3.5 कक्षाएं सभी माइक्रोसॉफ्ट में शामिल थीं। इंडेंटिटी मॉडल नामस्थान; उदाहरण के लिए, माइक्रोसॉफ्ट। इंडेंटिटी मॉडल, माइक्रोसॉफ्ट.इडेन्टिटीमोडेल टोकेंस, माइक्रोसॉफ्ट.इडेन्टिटीमोडेल.एब, और इसी तरह। डब्ल्यूआईएफ 4.5 में, डब्ल्यूआईएफ कक्षा अब सिस्टम भर में फैली हुई हैं। इंडेंटिटी मॉडल नामस्थान, सिस्टम। सुरक्षा। क्लास नामस्थान, और सिस्टम। सेवा मॉडल। सुरक्षा नामस्थान। इस पुनर्गठन के अलावा, कुछ WIF 3.5 कक्षा को WIF 4.5 में गिरा दिया गया है।

मैं खातिर डिबगिंग माइक्रोसॉफ्ट का उपयोग करने के लिए स्विच करने के लिए करने की कोशिश की। * SecurityTokenDescriptor के लिए नाम स्थान, और फिर मैं कह रहा TokenIssuerName, AppliesToAddress, और लाइफटाइम त्रुटियों की एक और श्रृंखला रहे हैं कि वर्ग के लिए मान्य गुण नहीं। फिर भी जब मैं ऑनलाइन दस्तावेज़ों को देखता हूं, ऐसा लगता है कि उन गुणों का माइक्रोसॉफ्ट पर मौजूद है। IdentityModel.Tokens.SecurityTokenDescriptor। फिर भी मेरे विजुअल स्टूडियो में, जब मैं उस कक्षा के लिए परिभाषा पर जाता हूं, तो वे वहां नहीं हैं, मुझे विश्वास है कि मेरे विजुअल स्टूडियो में कुछ प्रकार की कॉन्फ़िगरेशन समस्या है। मेरे पैकेज मैनेजर में, यह दिखाता है कि मेरे पास माइक्रोसॉफ्ट है IDentityModel.Tokens v5.0.0 स्थापित है। जेडब्ल्यूटी लाइब्रेरी की आवश्यकता होने के बाद से मैंने परियोजना को .NET Framework 4.5.1 में भी बदल दिया है। इसके अलावा, मुझे नहीं पता कि और कहां देखना है।

उत्तर

30

जब मैं उन्नत बनाया है, जो पहले Microsoft.IdentityModel.Protocol.Extensions पैकेज (जो जेडब्ल्यूटी पैकेज के 4.0.2 पर निर्भर) में था मैं OpenID Connect ने पुस्तकालय के साथ एक ऐसी ही स्थिति में भाग लेकिन अब Microsoft.IdentityModel.Protocols.OpenIdConnect जो Microsoft.IdentityModel.Protocols की 2.0.0 पर निर्भर करता है (जो जेडब्ल्यूटी पैकेज के 5.0.0 पर निर्भर करता है)।

अपने Microsoft.IdentityModel* और System.IdentityModel* संकुल के किसी भी निकालें, और केवल नवीनतम (5.0.0) System.IdentityModel.Tokens.Jwt पैकेज है जो Microsoft.IdentityModel.Tokens पर निर्भर करता है स्थापित करें।

आप इन नामस्थान के लिए बयानों का उपयोग कर चाहता हूँ: System.IdentityModel.Tokens.Jwt

  • Microsoft.IdentityModel.Tokens (लेकिन System.IdentityModel.Tokens नहीं)
  • System.Security .Claims

माइक्रोसॉफ्ट मापदंडों के कुछ और आप अन्य प्लेटफार्मों 'जेडब्ल्यूटी पुस्तकालयों से उम्मीद होती है क्या की तरह बनना आसान बना दिया है, तो SecurityTokenDescriptor गुण अल रहे हैं ittle अलग:

var tokenDescriptor = new SecurityTokenDescriptor 
{ 
    Subject = new ClaimsIdentity(new[] 
    { 
     new Claim(ClaimTypes.UserData, 
     "IsValid", ClaimValueTypes.String, "(local)") 
    }), 
    Issuer = "self", 
    Audience = "https://www.mywebsite.com", 
    Expires = now.AddMinutes(60), 
    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(securityKey), SecurityAlgorithms.HmacSha256), 
}; 

ध्यान दें कि SecurityAlgorithms.HmacSha256 एक स्ट्रिंग "HS256" के लिए स्थिर है, केवल आपके अधिकांश अन्य पुस्तकालयों में उपयोग करना चाहते हैं की तरह। उपरोक्त कोड का उपयोग करके आपके प्रश्न में उदाहरण, आप एक वैध जेडब्ल्यूटी उत्पन्न करने में सक्षम होना चाहिए।

+0

अंततः इसका परीक्षण करने के लिए चारों ओर मिल गया और यह खूबसूरती से काम किया। बहुत धन्यवाद! – Rocket04

संबंधित मुद्दे