ASP.NET पहचान का IUserSecurityStampStore <TUser> इंटरफ़ेस क्या है?


178

ASP.NET आइडेंटिटी (ASP.NET में नई सदस्यता के कार्यान्वयन) को देखते हुए, मैं अपने स्वयं के कार्यान्वयन के दौरान इस इंटरफ़ेस में आया UserStore:

//Microsoft.AspNet.Identity.Core.dll

namespace Microsoft.AspNet.Identity
{ 
    public interface IUserSecurityStampStore<TUser> :
    {
        // Methods
        Task<string> GetSecurityStampAsync(TUser user);
        Task SetSecurityStampAsync(TUser user, string stamp);
    }
}

IUserSecurityStampStore डिफ़ॉल्ट रूप से कार्यान्वित किया जाता है EntityFramework.UserStore<TUser> जाता है जो अनिवार्य से TUser.SecurityStampसंपत्ति प्राप्त करता है और निर्धारित करता है।

कुछ और खुदाई के बाद, ऐसा प्रतीत होता है कि SecurityStampGuid कि नव में मुख्य बिंदुओं पर उत्पन्न होता है UserManager(उदाहरण के लिए, बदलते पासवर्ड)।

रिफ्लेक्टर में इस कोड की जांच करने के बाद से मैं वास्तव में इससे आगे नहीं बढ़ सकता । लगभग सभी प्रतीक और async जानकारी को अनुकूलित किया गया है।

इसके अलावा, Google को अधिक मदद नहीं मिली है।

प्रश्न हैं:

  • एक क्या है SecurityStampASP.NET पहचान में है और इसके लिए इस्तेमाल किया क्या है?
  • करता है SecurityStampजब प्रमाणीकरण कुकीज़ बनाई जाती हैं तो कोई भूमिका निभाता है?
  • क्या कोई सुरक्षा व्यवधान या सावधानी बरतने की आवश्यकता है? उदाहरण के लिए, इस मूल्य को ग्राहकों के पास न भेजें?

अपडेट (9/16/2014)

स्रोत कोड यहां उपलब्ध है:


1
@TryingToImprove, नए पहचान स्टोर और आश्रित OWIN मिडलवेयर को अत्यधिक अनुकूलन योग्य बनाया गया है। SimpleMembership की तरह, SQL एक्सप्रेस पर नवीनतम EF का लाभ उठाने वाला एक आउट-ऑफ-द-बॉक्स कार्यान्वयन है। लेकिन स्कीमा, डेटा क्वेरी विधि, डेटाबेस स्रोत और यहां तक ​​कि मध्य वेयर आपके विशिष्ट पिल्ला के आसपास अनुकूलन योग्य हैं। क्या अधिक है, एमएस द्वारा जारी कार्यान्वयन अभी भी विकसित हो रहा है। इसलिए हर कोई एक विशिष्ट परिभाषा खोजने के लिए संघर्ष करता है।
डेव अल्परोविच

जवाबों:


224

यह आपके उपयोगकर्ता की साख के वर्तमान स्नैपशॉट का प्रतिनिधित्व करने के लिए है। इसलिए अगर कुछ नहीं बदलता है, तो स्टैम्प वही रहेगा। लेकिन अगर उपयोगकर्ता का पासवर्ड बदल गया है, या एक लॉगिन हटा दिया गया है (अपने Google / fb खाते को अनलिंक करें), तो स्टाम्प बदल जाएगा। यह स्वचालित रूप से उपयोगकर्ताओं को हस्ताक्षरित करने या पुरानी कुकीज़ को अस्वीकार करने जैसी चीजों के लिए आवश्यक है, जब ऐसा होता है, जो कि 2.0 में आने वाली एक विशेषता है।

पहचान अभी तक खुला स्रोत नहीं है, इसकी वर्तमान में पाइपलाइन अभी भी है।

संपादित करें: 2.0.0 के लिए अपडेट किया गया। तो का प्राथमिक उद्देश्य हैSecurityStamp हर जगह साइन आउट सक्षम करना है। मूल विचार यह है कि जब भी उपयोगकर्ता से संबंधित कुछ सुरक्षा को पासवर्ड की तरह बदला जाता है, तो कुकीज़ में किसी भी मौजूदा संकेत को स्वचालित रूप से अमान्य करना एक अच्छा विचार है, इसलिए यदि आपके पासवर्ड / खाते से पहले समझौता किया गया था, तो हमलावर की पहुंच अब नहीं है।

2.0.0 में हमने OnValidateIdentityविधि को हुक करने के लिए निम्नलिखित कॉन्फ़िगरेशन को जोड़ाCookieMiddleware को देखने के लिए SecurityStampऔर इसे बदलने पर कुकीज़ को अस्वीकार करने लिए । refreshIntervalयदि स्टैम्प अपरिवर्तित है (जो बदलती भूमिकाएँ आदि जैसी चीजों का ध्यान रखता है तो यह डेटाबेस से उपयोगकर्ता के दावों को स्वतः ही ताज़ा कर देता है )

app.UseCookieAuthentication(new CookieAuthenticationOptions {
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    Provider = new CookieAuthenticationProvider {
        // Enables the application to validate the security stamp when the user logs in.
        // This is a security feature which is used when you change a password or add an external login to your account.  
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});

यदि आपका ऐप इस व्यवहार को स्पष्ट रूप से ट्रिगर करना चाहता है, तो यह कॉल कर सकता है:

UserManager.UpdateSecurityStampAsync(userId);

1
क्या होगा यदि मैं MVC4 तालिका संरचना से डेटा माइग्रेट कर रहा हूं? क्या मैं उस क्षेत्र को खाली छोड़ सकता हूँ? या यह किसी तरह चीजों को पेंच करने वाला है?
Dmytro Shevchenko

1
आप इसे प्रभावी रूप से एक नो-ऑप बनाने के लिए आईडी या कुछ स्थिर लौटा सकते हैं। नल / "" शायद भी काम करेगा।
हाओ कुंग

2
UseOAuthBearerTokens के लिए UserManager.UpdateSecurityStampAsync (userId) काम करता है?
Rikard

7
नहीं, OAuthBearerTokens वर्तमान में प्रभावित नहीं हैं।
हाओ कुंग

3
UseCookieAuthenticationहै पदावनत अब तक। मैं इसका उपयोग करके इसे कॉन्फ़िगर करने में कामयाब रहा services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));
रिजेबोसच

11

UseCookieAuthentication अब तक पदावनत है। मैं इसका उपयोग करके इसे कॉन्फ़िगर करने में कामयाब रहा

services.Configure<SecurityStampValidatorOptions>(o => 
    o.ValidationInterval = TimeSpan.FromSeconds(10));

प्रति अनुरोध के उत्तर से स्थानांतरित किया गया ।


3
क्या यह काम करता है अगर मैं ASP.NET (कोर नहीं) का उपयोग कर रहा हूं? मैं उलझन में हूं। अगर मैं Asp Identity Repo में जाता हूं, तो यह कहता है कि यह Asp.NET Core के लिए है।
एल मैक

5

मैंने टोकन सत्यापन के लिए आवश्यक होने के लिए SecurityStamp का अवलोकन किया।

रेपो करने के लिए: डेटासबसे में अशक्त करने के लिए SecurityStamp सेट करें एक टोकन उत्पन्न करें (ठीक काम करता है) टोकन की असफलता सत्यापित करें)


यह एक बग हो गया है। यह टोकन जनरेट करने का कोई मतलब नहीं है जिसे सत्यापित नहीं किया जा सकता है।
विलियम टी। मैलार्ड

बग यह है कि यह आपको एक टोकन जेनरेट करता है जब सुरक्षा टिकट खाली होता है। (imho GenerateEmailConfirmationToken सुरक्षा स्टैम्प न होने पर विफल होना चाहिए। यह उत्तर देखें: stackoverflow.com/a/29926407/1058214 )
mendel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.