5

सुरक्षा चिंताओं: https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/ के अनुसार हस्ताक्षर के लिए एल्गोरिदम निर्धारित करने के लिए बहुत से जेडब्ल्यूटी पुस्तकालय स्वयं टोकन का उपयोग करते हैं।वेब एपीआई/एमवीसी में सुरक्षित JSON वेब टोकन 6

यह हमारा उपयोग केस है: हम एक लॉगिन तंत्र बनाना चाहते हैं जो हार्ड क्रेडेंशियल्स (उपयोगकर्ता नाम/पासवर्ड) वाले उपयोगकर्ता को मान्य करता है और फिर जेडब्ल्यूटी टोकन को वापस भेजता है। 3 दिन जीवनकाल। टोकन में उपयोगकर्ता नाम होना चाहिए और हस्ताक्षर को यह गारंटी देनी चाहिए कि टोकन को "फिक्र" नहीं किया जा सकता है।

वेब एपीआई/एमवीसी 6 में हम किस लाइब्रेरी का उपयोग कर सकते हैं? यह महत्वपूर्ण है कि भेद्यता से बचने के लिए हस्ताक्षर एल्गोरिदम डीकोडिंग पर निर्दिष्ट किया जा सके।

यदि संभव हो तो हम जटिल OAuth घटकों को एकीकृत करने से बचना चाहते हैं।

+0

थोड़ी सी गुगलिंग के बाद मुझे दो रोचक चीजें मिलीं: गिटहब पर खुली स्रोत परियोजना - jwt-dotnet: h ttps: //github.com/jwt-dotnet/jwt और JSON वेब टोकन हैंडलर NuGet पर Microsoft .NET Framework 4.5 के लिए: https://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/ यह देखो जैसे कि वे दोनों जेडब्ल्यूटी टोकन की पीढ़ी और सत्यापन की पेशकश कर सकते हैं, हालांकि मैंने इनका उपयोग नहीं किया है, – jjczopek

+0

मैंने इन्हें देखा। मुझे नहीं पता कि वे प्रमाणीकरण पर spec.of algo प्रदान करते हैं। – Matthias

उत्तर

3

मैं System.IdentityModel.Tokens.Jwt लाइब्रेरी का उपयोग कर रहा हूं, और मैंने अभी इस समस्या के लिए जांच की है। मैंने एक टोकन जेनरेट किया और इसे अपने परीक्षणों में से एक में मान्य किया, फिर मैंने signingCredentials हटा दिया जो कि किसी को भी नहीं बदलता है। "alg":"none"के साथ जेडब्ल्यूटी उत्पन्न हुआ सत्यापन विफल रहा। हस्ताक्षर सत्यापित करने में असमर्थ, टोकन नहीं करता है:

public string GenerateToken(SSOContext context, SignatureSettings settings) 
{ 
    var token = new JwtSecurityToken(
     issuer: "MyIssuer", 
     audience: "MyAudience", 
     claims: GetClaims(context), 
     //comment the below line to generate a 'none' alg 
     signingCredentials: new X509SigningCredentials(settings.Certificate), 
     notBefore: DateTime.UtcNow, 
     expires: DateTime.UtcNow.AddHours(1) 
     ); 

    return new JwtSecurityTokenHandler().WriteToken(token); 
} 

जब मैं टोकन मान्य संदेश

IDX10504 साथ की उम्मीद के रूप में मैं एक अपवाद प्राप्त करें:

यहाँ कैसे मैं टोकन बनाने रहा है हस्ताक्षर:

+0

जैसा कि मैंने भेद्यता के बारे में नेट में टिप्पणियां पढ़ी हैं, सुरक्षित पक्ष पर होने का एकमात्र तरीका हार्डकोडेड सत्यापन पर अपेक्षित अलगाव को परिभाषित करना होगा। क्या यह पुस्तकालय के साथ संभव है? कम से कम यह किसी भी अलगाव मुद्दे के लिए कमजोर नहीं होगा क्योंकि मैं आपकी प्रतिक्रिया को समझता हूं। शायद आप अतिरिक्त जानकारी की पुष्टि या जोड़ सकते हैं। – Matthias

+2

आप jwt ले सकते हैं और इसे JwtSecurityToken ऑब्जेक्ट में बदल सकते हैं और यह सुनिश्चित करने के लिए हस्ताक्षर एल्गोरिदम गुण की जांच भी कर सकते हैं कि यह भी अपेक्षित है। यदि नहीं, तो आप सत्यापन को परेशान भी नहीं कर पाएंगे और इसे अस्वीकार कर सकते हैं। [लिंक] (https://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.jwtsecuritytoken (v = vs.114) .aspx) यदि आप कुछ भी गलत देखते हैं, तो कृपया मुझे बताएं। मैं आंशिक रूप से यह देखने के लिए उत्तर दे रहा हूं कि कोई भी त्रुटि उत्पन्न करता है या नहीं। – TylerReid

+1

यह सब मेरे लिए उचित और ठोस दिखता है मुझे लगता है कि मैं जल्द ही आपका जवाब स्वीकार करने जा रहा हूं। मुझे यकीन नहीं है कि अगर मैं बक्षीस समाप्त होने तक पूरी तरह से परीक्षण कर सकता हूं। तो मुझे लगता है कि पुरस्कार के नुकसान को रोकने के लिए जल्द ही इसे स्वीकार करने की आवश्यकता है। – Matthias

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