डब्ल्यूआईएफ से पहले, Application_PostAcquireRequestState
एक कस्टम पहचान बनाने के लिए एक अच्छी जगह थी, लेकिन यह सुनिश्चित करने के लिए बहुत सारे ढांचे की आवश्यकता थी कि आप जिस प्रकार के प्रमाणीकरण को कर रहे थे वह उचित रूप से मैप किया गया था। कस्टम पहचान से, मेरा मतलब है पहचान से वंचित वर्ग, जैसे कि नीचे कुछ निश्चितता, ताकि हम एक विशिष्ट संपत्ति प्राप्त कर सकें जिसके लिए हमें सभी प्रमाणीकृत उपयोगकर्ताओं की आवश्यकता हो सकती है।एमवीसी आवेदन में डब्ल्यूआईएफ के साथ कस्टम पहचान कहां बनाएं?
PostAququirerequestState अभी भी उपलब्ध है, लेकिन नए तरीके हैं जिनके साथ आप प्रमाणीकरण में हुक कर सकते हैं। इसके अतिरिक्त, कई प्रमाणीकरण विधियों का समर्थन करते समय पुराने तरीके जटिल हो जाते हैं।
मैं जानना चाहता हूं कि अब WIF में इसे पूरा करने के लिए नीचे से बेहतर तरीका है या नहीं। मुख्य रूप से मैं उस कोड को अलग करना चाहता हूं जो पहचान के लिए मैपिंग दावों को संभालता है। यह विचार यह है कि कोड अन्य प्रमाणीकरण प्रकारों/प्रदाताओं के लिए अलग होगा, जिस तरह से यह पुनर्प्राप्त करता है कि संपत्ति मूल्य SAML के साथ दावा से नहीं हो सकता है, लेकिन अन्य प्रकार के प्रमाणीकरण विधियों के लिए कहीं और से नहीं हो सकता है। मैं वर्तमान में SAML समर्थन के लिए Kentor.AuthServices
का उपयोग कर रहा हूं। हालांकि प्रदाता के आधार पर उन मूल्यों को मैप करने के लिए अलग-अलग कोड हो सकते हैं, अंत परिणाम यह होगा कि कुछ इवेंटेंटिटी उदाहरण बनाया गया था और यह कुछ प्रॉपर्टी और अन्य गुण सेट किए जाएंगे। इस प्रकार शेष एप्लिकेशन हमेशा निर्भर/मान लिया जा सकता है कि उनको संभाला गया है।
मेरा एमवीसी प्रोजेक्ट AccountController
के साथ आया था जिसमें ExternalLoginCallback
था जो बाहरी प्रमाणीकरण पूरा होने पर लागू किया गया नाम एक अच्छा हुक हो सकता है (जो मुझे SAML एक "बाहरी" प्रमाणीकरण है)। हालांकि, यह किसी SAML प्रमाणीकरण के दौरान/उसके बाद किसी भी बिंदु पर हिट नहीं लग रहा है।
यह जवाब हो सकता है कि हमें अभी भी इसे अपने आप को पुराने तरीके से टुकड़ा करने की जरूरत है, लेकिन मुझे उम्मीद थी कि डब्ल्यूआईएफ के पास यह आसान बनाने के लिए कुछ बेहतर ढांचे के हुक थे।
public sealed class SomeIdentity : Identity
{
...
// Some custom properties
public string SomeProperty { get;set;}
}
protected void Application_PostAcquireRequestState(object sender, EventArgs e)
{
...
identity = new SomeIdentity(id, userId);
// map a claim to a specific property
identity.SomeProperty = ...Claims[IdpSomePropertyKey];
///...
GenericPrincipal newPrincipal = new GenericPrincipal(identity , null);
HttpContext.Current.User = newPrincipal;
System.Threading.Thread.CurrentPrincipal = newPrincipal;
}
अब जब कि मैं WIF उपयोग कर रहा हूँ, जहाँ मैं कोड है कि एक विशेष प्रमाणीकरण प्रकार (अर्थात। Kentor.AuthServices SAML) जो एक कस्टम SomeIdentity बनाता है के लिए विशिष्ट है डाल किया जाना चाहिए?
विचार यह है कि कुछ लोगों को मेरे आवेदन में हर जगह पहचान वर्ग माना जाएगा, लेकिन इसके गुणों को पॉप्युलेट करने के लिए कोड को विशेष रूप से प्रत्येक प्रमाणीकरण प्रकार के लिए लिखा जाना चाहिए, जैसे कि SAML के साथ दावों को खींचने और उनके मूल्यों का उपयोग करने के लिए proeprties सेट करने के लिए। अर्थात। यह वह जगह है जहां मानचित्रण होता है।
आप सरल उदाहरण के लिए देखने के लिए कोशिश की है? https://github.com/valkovnet/IdentityServer, https://github.com/IdentityServer/IdentityServer2। वास्तव में, मुख्य चाल Web.config में पहचान सर्वर को कॉन्फ़िगर करना है। यह आपको संघीय प्रमाणीकरण पहुंच प्रदान करेगा – deeptowncitizen
सरल उदाहरण आमतौर पर कस्टम पहचान के बिना सरल वेब.कॉन्फिग आधारित कॉन्फ़िगरेशन होते हैं। मैंने valkovnet उदाहरण देखा और यह एक समाधान है जब आप एक नई परियोजना उत्पन्न करते हैं और फिर web.config में WIF सेट करते हैं। वास्तव में कोई प्रोग्रामेटिक कॉन्फ़िगरेशन या पहचान की सेटिंग नहीं थी जो मुझे तब तक मिल सकती थी जब तक कि मैं सही जगह पर नहीं देख रहा था। – AaronLS
क्या यह एक ओविन ऐप है? क्या आपके पास App_Start फ़ोल्डर है? –