2010-09-11 9 views
8

मैं एक नई साइट बना रहा हूं और मैं चाहता हूं कि उपयोगकर्ता साइन इन करने के कई तरीकों का उपयोग कर सकें, मूल रूप से उपयोगकर्ता सक्षम होना चाहिए मेरी साइट पर एक नया उपयोगकर्ता बनाने के लिए या फेसबुक कनेक्ट का उपयोग करें या साइट पर लॉग इन करने के लिए ट्विटर के खाते का उपयोग करें।Asp.Net MVC (फॉर्म, एफबी कनेक्ट, ट्विटर, ओपनआईडी) के साथ मिश्रित प्रमाणीकरण का उपयोग करें

मैंने इन विधियों में से किसी एक का उपयोग करने पर कई ट्यूटोरियल देखे हैं, जो मैं जानना चाहता हूं वह यह है कि ऐसा करने का सबसे अच्छा तरीका क्या है?

अब तक मुझे लगता है कि एक कस्टम प्रमाणीकरण मॉडल (मौजूदा प्राधिकरण वर्गों को उप-प्रकार करने जैसा कुछ) बनाना सबसे अच्छा तरीका होगा।

क्या यह सबसे अच्छा तरीका है? क्या आप मुझे कुछ ऐसा करने की कोशिश कर रहे किसी अच्छे उदाहरण के लिए इंगित कर सकते हैं?

धन्यवाद एक बहुत

उत्तर

8

मैं हाल ही में कुछ इसी तरह के बारे में ब्लॉग ... यहाँ दृष्टिकोण मैं

public class User { 
    public int UserID { get; set; } 
    public string Name { get; set; } 
    public string Page { get; set; } 

    public virtual Authentication Authentication { get; set; } 
} 

public class Authentication { 
    public int Id { get; set; } 
    public string LoginId { get; set; } 
    public string Provider { get; set; } 
    public string Password { get; set; } 

    public virtual User User { get; set; } 
} 

//login methods 
User StandardUserLogin(string username) { 
    IDataContext db = new DataContext(); 
    var user = db.Users.SingleOrDefault(u => u.Authentication.LoginId == username); 
    if (user != null) { 
     if (user.Authentication.Password == password) { 
      SetAuthenticationTicket(user); 
      return user; 
     } 
    } 
} 

ले लिया मैं कैसे अपने प्राधिकरण योजनाओं के आधार पर प्रवेश के प्रत्येक प्रकार के लिए किसी अन्य प्रवेश विधि बनाने जाएगा काम।

User OpenIdUserLogin(string username) { 
    IDataContext db = new DataContext(); 
    var user = db.Users.SingleOrDefault(u => u.Authentication.LoginId == username && u.Authentication.Provider == "openid"); 
    if (user == null) { 
     //create new openid user 
    } 

    if (user.Authentication.LoginId == id) { 
     SetAuthenticationTicket(user); 
     return user; 
     } 
} 

//openid's authentication method 
[ValidateInput(false)] 
public ActionResult Authenticate(string returnUrl) { 
    IAuthenticationResponse response = OpenId.GetResponse(); 

    if (response == null) { 
     //make openid request here 
    } else { 
     var user = OpenIdUserLogin(response.ClaimedIdentifier); 
    } 
} 

Btw, शीर्ष पर दो वर्गों का प्रतिनिधित्व मेरी इकाई की रूपरेखा Pocos कुंजी यहाँ प्रमाणीकरण तालिका जो उपयोगकर्ता मेज से अलग है। यह एक उपयोगकर्ता को साइन इन करने के कई तरीकों की अनुमति देता है। उम्मीद है कि यह आपको ट्रैक पर लाने में मदद करेगा।

+0

त्वरित प्रश्न; ये विधियां OpenID के लिए हैं, ओपन प्रमाणीकरण नहीं जो ट्विटर का उपयोग करता है। क्या हम ओपनआईडी या ओपन ऑथ के बावजूद एक ही प्रक्रिया कर सकते हैं? – FelixMM

+0

हाँ, यह पीओसीओ कक्षाएं काफी सामान्य हैं। आपको एक या दो फ़ील्ड जोड़ना पड़ सकता है, लेकिन मुझे संदेह है कि यह ट्विटर के साथ मेरा सीमित अनुभव दिया गया है, आपको केवल अपने लेख टोकन को स्टोर करने की आवश्यकता है, जिसे 'LoginId' फ़ील्ड में संग्रहीत किया जाएगा। फिर, आप अलग-अलग लॉगिन प्रकारों पर बस एक अलग विधि कॉल करेंगे। तो OpenIdUserLogin के बजाय आप एक ट्विटर को कॉल करेंगे। यदि मैं बहुत व्यस्त नहीं हूं तो मुझे आपके ब्लॉग में एक नई पोस्ट जोड़नी होगी यदि आपको परेशानी हो रही है :) – Buildstarted

+0

प्रतिक्रिया के लिए धन्यवाद। मैंने ओपनआईडी लॉगिन को उसी तरह से लागू किया जैसा आपने यहां जवाब दिया था और अब मैं ओथ के लिए जा रहा हूं। मैं वर्तमान में इन दो लिंक का पालन कर रहा हूं: http://bit.ly/csBrgM और http://bit.ly/i8GwDh ने अभी तक परीक्षण नहीं किया है, इसलिए यह या तो वास्तव में अच्छा हो सकता है, या वास्तव में बुरा हो सकता है, लेकिन फिर, धन्यवाद आपकी प्रतिक्रिया के लिए :) – FelixMM

1

यदि आप प्रति माह कुछ रुपये खर्च करने के लिए खुले हैं तो Windows Azure Access Control Service एएसपी.NET के लिए ड्रॉप-इन सदस्यता प्रदाता के रूप में यह कार्यक्षमता प्रदान करता है। यह नए विंडोज 8 एसएसओ क्रेडेंशियल फ्लो का भी आधार है।

ध्यान दें कि ट्विटर अभी तक समर्थित नहीं है, हालांकि, एक्सेस कंट्रोल OAuth 1.0 का समर्थन नहीं करता है।

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