2014-07-22 12 views
13

में दावा प्रकारों का सही ढंग से उपयोग करना मैं ओविन और पहचान का उपयोग कर रहा हूं और मुझे दावों में समस्या है।ओविन पहचान और Asp.Net एमवीसी

मेरे पास ऐसे एप्लिकेशन हैं जहां उपयोगकर्ता प्रमाणीकरण के लिए ईमेल का उपयोग करते हैं और अन्य उपयोगकर्ता नाम का उपयोग करते हैं।

  1. व्यापार परत में साइन इन विधि मामले के आधार पर एक ईमेल या उपयोगकर्ता नाम स्वीकार कर सकती है।

  2. उपयोगकर्ता पहचान को "obfuscate" करने के लिए मैं उपयोगकर्ता जानकारी के साथ एक पृष्ठ प्रदर्शित करते समय, प्रत्येक उपयोगकर्ता के लिए अद्वितीय, एक GUID का उपयोग करता हूं।

    मैं भी इस का उपयोग करें क्योंकि कभी कभी एक ईमेल या एक उपयोगकर्ता नाम URL में एक समस्या हो सकती ...

जब मैं एक उपयोगकर्ता हस्ताक्षर मैं निम्नलिखित दावे प्रकार है:

new Claim(ClaimTypes.Email, user.Email), 
new Claim(ClaimTypes.Name, user.FullName), 
new Claim(ClaimTypes.GivenName, user.FirstName), 
new Claim(ClaimTypes.Surname, user.LastName), 
new Claim(ClaimTypes.NameIdentifier, user.UserUniqueIdentifier.ToString()) 

तो मेरी व्याख्या है:

Email is the user's email 

Name is the user's full name 

GivenName is the user's first name 

Surname is the user's last name 

NameIdentifier is the user's unique identifier ... It can be the email, the username or in this case I am using an Unique ID. 

क्या अजीब बात है वहाँ प्रयोक्ता नाम के लिए कोई दावा प्रकार है। इसे कहां रखना होगा?

असल में ऐसा लगता है कि उपयोगकर्ता नाम अद्वितीय नाम पहचानकर्ता के रूप में उपयोग नहीं किया जाता है लेकिन यह अभी भी आवश्यक है।

क्या मेरे तर्क दावों के प्रकार में कुछ गड़बड़ है?

उत्तर

19

ClaimTypes.Name (http: // schemas.xmlsoap.org/ws/2005/05/identity/claims/name) उपयोगकर्ता नाम के लिए उपयोग किया जाना चाहिए।

ClaimTypes.NameIdentifier आमतौर पर उपयोगकर्ता की आईडी के लिए उपयोग किया जाता है। कुछ मामलों में यह एक उपयोगकर्ता नाम हो सकता है।

उपयोगकर्ता की प्राथमिक कुंजी GUID को संग्रहीत करने के लिए उपयोगकर्ता नाम, और ClaimTypes.NameIdentifier स्टोर करने के लिए ClaimTypes.Name का उपयोग करता है।

+0

और आप उपयोगकर्ता का असली नाम कहां स्टोर करेंगे? मेरा मतलब है, कल्पना करें कि उपयोगकर्ता का नाम "जॉन ब्रॉक स्मिथ" है –

+4

आप अपने दावों को बना सकते हैं। वे सिर्फ तार हैं। पूर्ण नाम नामक एक स्ट्रिंग स्थिर बनाएं। नया दावा (पूर्णनाम, "जॉन ब्रॉक स्मिथ"), – cecilphillip

7

आप जांच यदि oAuth से फेसबुक या गूगल वापसी आपको लगता है कि ClaimTypes.NameClaimTypes.GivenName + ClaimTypes.Surname है देखेंगे। लिंक्डइन फिर वापस आता है और मेरा मानना ​​है कि यह एक बग है क्योंकि मेरे पास एक बिल्कुल अलग उपयोगकर्ता नाम है। ट्विटर ClaimTypes.Name के लिए उपयोगकर्ता नाम देता है, लेकिन ट्विटर एक विशेष मामला है और वे ईमेल भी वापस नहीं करते हैं।

उनमें से सभी ClaimTypes.NameIdentifier के लिए कुछ संख्यात्मक अर्थहीन संख्या का उपयोग कर रहे हैं। और वे कस्टम डेटा के लिए आमतौर पर urn:facebook:link, urn:google:profile आदि से शुरू करते हुए अपने स्वयं के स्ट्रिंग नामों का उपयोग करते हैं।

Asp.NET पहचान मॉडल ClaimTypes.Name के लिए उपयोगकर्ता नाम का उपयोग करता है। निचली पंक्ति यह है कि ClaimTypes.Name अभ्यास में अलग-अलग प्रयोग किया जाता है। आप स्ट्रिंग के रूप में कोई दावा नाम जोड़ सकते हैं और इसे urn:... योजना को स्पष्ट बनाने के लिए जोड़ सकते हैं।

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