मेरे पास एक वेब फ्रंट एंड है जो एएसपी वेब एपीआई 2 बैकएंड को कॉल करता है। प्रमाणीकरण एएसपी पहचान के साथ प्रबंधित किया जाता है। मेरे द्वारा बनाए जा रहे कुछ नियंत्रकों के लिए मुझे कॉल करने वाले उपयोगकर्ता को जानने की आवश्यकता है। मैं उपयोगकर्ता की पहचान (जिसे मैं क्लाइंट में भी स्टोर नहीं करता) सहित पास करने के लिए कुछ अजीब मॉडल बनाना नहीं चाहता हूं।वेब एपीआई कॉल के दौरान उपयोगकर्ता संदर्भ कैसे प्राप्त करें?
एपीआई को सभी कॉल एक भालू टोकन का उपयोग करके अधिकृत हैं, मेरा विचार है कि नियंत्रक इस पर आधारित उपयोगकर्ता संदर्भ को निर्धारित करने में सक्षम होना चाहिए लेकिन मुझे नहीं पता कि इसे कैसे कार्यान्वित किया जाए। मैंने खोज की है लेकिन मुझे नहीं पता कि मैं वास्तव में क्या खोज रहा हूं और कुछ भी प्रासंगिक नहीं मिला है। मैं कुछ तरह के लिए जा रहा हूँ ...
public async Task<IHttpActionResult> Post(ApplicationIdentity identity, WalkthroughModel data)
अद्यतन
मैंने पाया जो नीचे बहुत आशाजनक देखा ... लेकिन मान हमेशा शून्य है! मेरा नियंत्रक एपीकंट्रोलर से विरासत में आता है और इसमें एक अधिकृत शीर्षलेख है।
var userid = User.Identity.GetUserId();
अद्यतन 2
मैं भी Get the current user, within an ApiController action, without passing the userID as a parameter लेकिन कोई भी काम में समाधान के सभी की कोशिश की है। कोई फर्क नहीं पड़ता कि मैं कहाँ मैं अब पर हूँ है एक पहचान है कि वैध और auth'd है, लेकिन एक अशक्त UserID
अद्यतन 3
यहाँ है हो रही है।
[Authorize]
[Route("Email")]
public async Task<IHttpActionResult> Get()
{
var testa = User.Identity.GetType();
var testb = User.Identity.GetUserId();
var testc = User.Identity.AuthenticationType;
var testd = User.Identity.IsAuthenticated;
return Ok();
}
testa = Name: ClaimsIdentity, testb = null, testc = Bearer, testd = true
उपयोगकर्ता स्पष्ट रूप से प्रमाणित है, लेकिन मैं उनके userID प्राप्त करने में असमर्थ हूँ।
अद्यतन 4
मैं एक जवाब मिल गया है, लेकिन मैं वास्तव में इसे से संतुष्ट नहीं हूं ...
ClaimsIdentity identity = (ClaimsIdentity)User.Identity;
string username = identity.Claims.First().Value;
मुझे किसी भी db कॉल के बिना उपयोगकर्ता नाम हो जाता है यही कारण है कि लेकिन यह बहुत janky लगता है और भविष्य में समर्थन करने के लिए एक दर्द। अगर किसी के पास कोई बेहतर जवाब था तो प्यार करेंगे।
क्या होगा यदि मुझे सड़क को कौन से दावे जारी किए जाएंगे तो क्या होगा? इसके अलावा किसी भी समय मुझे वास्तव में उपयोगकर्ता की आईडी की आवश्यकता होती है, मुझे उपयोगकर्ता नाम आईडी
तो जब आप दावा जारी क्यों नहीं उपयोगकर्ता नाम एक जोड़ सकता हूँ? आप दावाों पर अपनी खुद की विस्तार विधियां भी कर सकते हैं। – Casey
@emodendroket यह एक अच्छा विचार की तरह लगता है, लेकिन मुझे नहीं पता कि यह कैसे करें। मैं सदस्यता सामग्री में बहुत कमजोर हूं इसलिए मैं ऑनलाइन मिले टेम्पलेट्स/ट्यूटोरियल से काम कर रहा हूं। मैं स्पष्ट रूप से उपयोगकर्ता नाम के साथ दावा जारी नहीं करता लेकिन स्पष्ट रूप से यह मेरे कोड में कहीं होता है: - \ सुझाव के लिए धन्यवाद मैं उस –
@emodendroket को बंद करने की कोशिश करूंगा ... मेरे सभी शोधों के अनुसार User.Identity.GetUserId(); * काम करना चाहिए और यह नहीं है! मैं समझना चाहता हूं कि यह क्यों काम नहीं कर रहा है और इसे उचित तरीके से हल नहीं कर रहा है, या यदि कम से कम इसे समझने और कामकाज को लागू नहीं किया जाता है। –