मेरे पास यह एएसपीएनटी एमवीसी प्रोजेक्ट है जो कुकी आधारित प्रमाणीकरण का उपयोग करता है और मैंने इसके बाद एक वेब एपीआई एंडपॉइंट जोड़ा है यह स्टैक ओवरफ्लो थ्रेड। यह एक आकर्षण की तरह काम करता है लेकिन जब मैं एपीआई नियंत्रक को [Authorize] से सजाता हूं, तो अनुरोध तब भी प्रमाणित नहीं हो पाता जब मैं डाकिया में उपयोगकर्ता नाम और पासवर्ड प्रदान करता हूं। मैं चाहता हूं कि ApiController कुकी आधारित प्रमाणीकरण को एमवीसी भाग में रखते हुए टोकन आधारित प्रमाणीकरण की अनुमति दें। किसी भी सहायता के लिए अग्रिम रूप से धन्यवाद।

0
Prince Gnakou 23 सितंबर 2019, 20:16
टोकन आधारित प्रमाणीकरण -> JWT या OAuth?
 – 
George Stocker
23 सितंबर 2019, 20:18
OAuth टोकन आधारित प्रमाणीकरण
 – 
Prince Gnakou
23 सितंबर 2019, 20:18

2 जवाब

सबसे बढ़िया उत्तर

मुझे लगता है कि वेब एपीआई और एमवीसी के लिए आपके अनुप्रयोगों में आपके पास अलग-अलग परियोजनाएं हैं।

वेब एपीआई प्रोजेक्ट में, यदि आप 'व्यक्तिगत उपयोगकर्ता खाते' के रूप में प्रमाणीकरण के साथ कोई प्रोजेक्ट बनाते हैं, तो यह प्रोजेक्ट में स्वचालित रूप से OAuth फ़ाइलें और संबंधित कोड जोड़ता है। यदि आप बिना प्रमाणीकरण वाला कोई प्रोजेक्ट बनाते हैं, तो आपको OAuth सुविधा का उपयोग करने के लिए Owin मिडलवेयर को जोड़ना होगा।

आप इन सेटिंग्स को Statup.Auth.cs फ़ाइल में देख रहे होंगे। यहां छवि विवरण दर्ज करें

एमवीसी पक्ष पर, डिफ़ॉल्ट प्रमाणीकरण कुकी आधारित है। अपने वेब एपीआई को कॉल करने के लिए, आपको HTTPClient का उपयोग करना होगा। इसे एक टोकन वापस करना चाहिए जिसे आप अपने DefaultRequestHeaders में इस तरह जोड़ सकते हैं (मैं इस दृष्टिकोण का उपयोग कर रहा हूं)। यहां छवि विवरण दर्ज करें

अन्य विकल्प टोकन को सत्र में संग्रहीत करना या प्रमाणीकरण कुकी में जोड़ना है।

मुझे आशा है कि आपको यह मददगार लगेगा। :)

1
knigalye 19 सितंबर 2020, 10:03

विजुअल स्टूडियो 2019 में जब आप एक वेब एपीआई प्रोजेक्ट टेम्प्लेट बनाते हैं और प्रमाणीकरण के लिए व्यक्तिगत उपयोगकर्ता खाते का चयन करते हैं, तो बनाम आपके लिए एक टोकन-आधारित प्रमाणीकरण लागू करते हैं जो इस अनुच्छेद। अंतर केवल इतना है कि लेख उपयोगकर्ता डेटा संग्रहीत करने के लिए एक विरासत तालिका का उपयोग करता है और माइक्रोसॉफ्ट का कोड प्रसिद्ध AspNetUsers तालिका का उपयोग करता है। मैं आपको लेख का अनुसरण करने की दृढ़ता से अनुशंसा करता हूं और अंत में निम्नलिखित कोड के साथ ApplicationOAuthProvider फ़ाइल में GrantResourceOwnerCredentials विधि को प्रतिस्थापित करें:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

        ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);

        if (user == null)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
           OAuthDefaults.AuthenticationType);
        ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
            CookieAuthenticationDefaults.AuthenticationType);

        AuthenticationProperties properties = CreateProperties(user.UserName);
        AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
        context.Validated(ticket);
        context.Request.Context.Authentication.SignIn(cookiesIdentity);
    }
0
vahid 23 सितंबर 2019, 21:18