ASP.NET MVC 5 और WEB API 2 में oauth2 सर्वर को कैसे लागू किया जाए [बंद]


127

पहले मैं अपना प्रोजेक्ट स्केच करूंगा:

अपनी इंटर्नशिप के लिए मुझे मौजूदा सिस्टम में कार्यक्षमता जोड़ने की आवश्यकता है। OAuth2 के माध्यम से उपयोगकर्ता द्वारा अधिकृत किए जाने के बाद एक 3 पार्टी क्लाइंट को एक्सएक्स वेबसर्विस से डेटा का उपयोग करने में सक्षम होना चाहिए। मैं समझता हूं कि मुझे एक 'प्रॉक्सी वेब सेवा' बनाने की आवश्यकता है, जिसे ग्राहक अपनी कॉल कर सकता है और जो AX सेवाओं को कॉल करता है, लेकिन मैं OAuth2 भाग के बारे में थोड़ा अनिश्चित हूं। अधिकांश ट्यूटोरियल और गाइड ASP.NET की फेसबुक या Google- लॉगिन के लिए पहचान का उपयोग करने के बारे में हैं। मुझे इसकी आवश्यकता नहीं है, मुझे मौजूदा क्रेडेंशियल्स का उपयोग करने की आवश्यकता है इसलिए मुझे अपनी OAuth2 सेवा बनाने की आवश्यकता है।

मुझे इस पर ट्यूटोरियल, गाइड या स्पष्टीकरण खोजना मुश्किल है। मैं OAuth2 को समझता हूं और क्या करने की जरूरत है, लेकिन मैंने ऐसा पहले कभी नहीं किया है और इसे शुरू करना मुश्किल है। निकटतम चीज़ जो मुझे चाहिए वह मुझे मिल गया है, यह गितुब रेपो लिंक है , लेकिन समाधान नहीं बनता है।

मेरे मन में एक ASP.NET MVC वेबसाइट बन रही है, जहाँ ग्राहक (तृतीय पक्ष) स्वयं को पंजीकृत कर सकते हैं और अपनी क्लाइंट आईडी प्राप्त कर सकते हैं। ASP.NET API के साथ मैं एपीआई बनाना चाहता था जो आवश्यक टोकन और पैरामीटर ले, और फिर Dyn AX सेवाओं का उपयोग करें।

क्या यह सही है या मैं पूरी तरह से गलत हूं? अपने स्वयं के oauth2 सर्वर / सेवा के निर्माण के संबंध में कोई मदद या लिंक अच्छा होगा।


जवाबों:


189

मैं देखूंगा लेकिन अध्याय के नामों से मुझे लगता है कि यह फिर से वैसा नहीं है जैसा कि मैं पहचान और फेसबुक / गूगल लॉगिन पहचान प्रदाताओं पर केंद्रित करता हूं।
रॉबिन

3
केवल भाग 4 फेसबुक और गूगल के बारे में है। मैंने दो महीने पहले इन ट्यूटोरियल के आधार पर अपना स्वयं का प्रमाणीकरण नियंत्रक लागू किया था। और मैं अपने स्वयं के उपयोगकर्ता डेटाबेस का भी उपयोग कर रहा था।
माइकल 19

1
मेरा एक और सवाल है, ये टोकन कहां जमा होते हैं? क्या आइडेंटिटी इसका पूरा ख्याल रखती है?
रॉबिन

17
@ मेरे ब्लॉग पोस्टों का जिक्र करने के लिए मिचेल्स धन्यवाद, खुशी है कि यह आपकी परियोजना के लिए उपयोगी था :)
तैसेर जौडेह

@MichaelS मुझे संदेह है अगर टोकन आधारित प्रमाणीकरण का तरीका बाकी आपी के लिए पर्याप्त सुरक्षा है। क्योंकि अगर मुझे उसके ब्राउज़र में उपयोगकर्ता टोकन मिल सकता है। मुझे लगता है कि यह प्राप्त किया जा सकता है क्योंकि टोकन अनुरोध शीर्षलेख में संग्रहीत है Authentication। मैं वह सब कुछ कर सकता हूं, जो मुझे पसंद है / गेट / पोस्ट / डिलीट करना।
जो.वांग

87

मैं भी सिर्फ टोकन भाग उत्पन्न करने के बारे में लेख खोजने में संघर्ष करता था। मैंने कभी एक नहीं पाया और अपना लिखा। तो अगर यह मदद करता है:

करने के लिए चीजें हैं:

  • एक नया वेब एप्लिकेशन बनाएं
  • निम्नलिखित NuGet पैकेज स्थापित करें:
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • एक OWIN startupवर्ग जोड़ें

फिर index.jsइन सामग्रियों के साथ एक HTML और एक जावास्क्रिप्ट ( ) फ़ाइल बनाएँ:

var loginData = 'grant_type=password&username=test.test@mail.com&password=test123';

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
        alert(xmlhttp.responseText);
    }
}
xmlhttp.open("POST", "/token", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(loginData);
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript" src="index.js"></script>
</body>
</html>

OWIN startupवर्ग में यह सामग्री होनी चाहिए:

using System;
using System.Security.Claims;
using Microsoft.Owin;
using Microsoft.Owin.Security.OAuth;
using OAuth20;
using Owin;

[assembly: OwinStartup(typeof(Startup))]

namespace OAuth20
{
    public class Startup
    {
        public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

        public void Configuration(IAppBuilder app)
        {
            OAuthOptions = new OAuthAuthorizationServerOptions()
            {
                TokenEndpointPath = new PathString("/token"),
                Provider = new OAuthAuthorizationServerProvider()
                {
                    OnValidateClientAuthentication = async (context) =>
                    {
                        context.Validated();
                    },
                    OnGrantResourceOwnerCredentials = async (context) =>
                    {
                        if (context.UserName == "test.test@mail.com" && context.Password == "test123")
                        {
                            ClaimsIdentity oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
                            context.Validated(oAuthIdentity);
                        }
                    }
                },
                AllowInsecureHttp = true,
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1)
            };

            app.UseOAuthBearerTokens(OAuthOptions);
        }
    }
}

अपना प्रोजेक्ट चलाएं। पॉप-अप में टोकन प्रदर्शित किया जाना चाहिए।


5
मुझे वास्तव में पसंद है कि आप एएसपी आइडेंटिटी या एंटिटी फ्रेमवर्क में कैसे नहीं लाए। अधिकांश लेख जिन्हें मैंने OAuth समाधान के साथ एकीकृत किया है। आपका समाधान OAuth और टोकन जारी करने पर केंद्रित है। बहुत अच्छा। अपने ब्लॉग पर पोस्ट करने के लिए धन्यवाद।
वेबवार्ता

@ कै - Microsoft ASP.NET Identity Owinखेल में कहाँ आता है? क्या आप अपने उपयोगकर्ता प्रमाणीकरण के लिए ASP.NET पहचान का उपयोग कर रहे हैं? यदि नहीं, तो क्या यह NuGet पैकेज अभी भी आवश्यक है?
वेबवार्ता

1
@webworm - लाइन के app.UseOAuthBearerTokens(OAuthOptions);बिना काम नहीं करेगा Microsoft ASP.NET Identity Owin। यह विधि को मान्यता नहीं देता है UseOAuthBearerTokens
काई हार्टमैन

अनुपलब्ध पैकेज: Microsoft.Owin.Host.SystemWeb, Microsoft ASP.NET आइडेंटिटी ओविन
मुहम्मद अफशाल

3
मैं सिर्फ एक चीज जोड़ना चाहता हूं, यदि आप भी न्यूटनसॉफ्ट.जोन को असेंबली एरर (.NET 4.6 और उससे ऊपर की) में अमान्य कर रहे हैं तो कृपया Newtonsoft.Json को संस्करण 11 या इसके बाद के संस्करण में अपडेट करें।
vibs2006

4

मैं एक ही बात पर शोध कर रहा हूँ और पर ठोकर खाई identityserver जो ASP.NET के शीर्ष पर OAuth और OpenID लागू करता है। यह Entity फ्रेमवर्क के लिए दृढ़ता समर्थन के साथ ASP.NET पहचान और सदस्यता रिबूट के साथ एकीकृत करता है।

इसलिए, अपने प्रश्न का उत्तर देने के लिए, OAuth और OpenID सर्वर को सेटअप करने के तरीके के बारे में उनके विस्तृत दस्तावेज़ देखें ।


-12

Gmail: OAuth

  • गोटो लिंक
  • अपने जीमेल यूजरनेम पासवर्ड के साथ लॉगिन करें
  • ऊपर बाईं ओर दिए गए Google मेनू पर क्लिक करें
  • API प्रबंधक पर क्लिक करें
  • क्रेडेंशियल पर क्लिक करें
  • क्रेडेंशियल बनाएं पर क्लिक करें और OAuth क्लाइंट चुनें
  • एप्लिकेशन प्रकार के रूप में वेब एप्लिकेशन का चयन करें और नाम दर्ज करें-> अधिकृत रीडायरेक्ट URL दर्ज करें (जैसे: http: // localhost: 53922 / signin-google ) -> Create बटन पर क्लिक करें। इससे साख बनेगी। Pls का नोट बनाएँ Client IDऔर Secret ID। अंत में क्रेडेंशियल्स पॉप अप को बंद करने के लिए ओके पर क्लिक करें।
  • अगला महत्वपूर्ण कदम है सक्षम करना Google API। बाएँ फलक में अवलोकन पर क्लिक करें।
  • Google APIअंडर सोशल एपीआई सेक्शन पर क्लिक करें ।
  • सक्षम करें पर क्लिक करें।

यह सब Google के हिस्से से है।

अपने आवेदन पर वापस आएं, App_start/Startup.Auth.csनिम्नलिखित स्निपेट खोलें और अनसुना करें

        app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
        {
            ClientId = "",
            ClientSecret = ""
        });

अद्यतन करें ClientIdऔर ClientSecretउन Google APIक्रेडेंशियल से मानों के साथ जो आपने पहले ही बनाए हैं।

  • अपना एप्लिकेशन चलाएं
  • लॉगिन पर क्लिक करें
  • आपको will लॉग इन करने के लिए एक और अनुभाग का उपयोग करें ’अनुभाग में Google बटन दिखाई देगा
  • Google बटन पर क्लिक करें
  • एप्लिकेशन आपको उपयोगकर्ता नाम और पासवर्ड दर्ज करने के लिए संकेत देगा
  • जीमेल यूजरनेम और पासवर्ड डालें और साइन इन पर क्लिक करें
  • यह OAuth प्रदर्शन करेगा और आपके आवेदन पर वापस आएगा और आपको Gmailआईडी के साथ पंजीकरण करने के लिए प्रेरित करेगा ।
  • Gmailआईडी को अपने एप्लिकेशन डेटाबेस में पंजीकृत करने के लिए रजिस्टर पर क्लिक करें ।
  • आप सामान्य पंजीकरण के रूप में शीर्ष में पहचान का विवरण देखेंगे
  • लॉगआउट करने का प्रयास करें और फिर से Gmail से लॉगिन करें। यह स्वचालित रूप से आपको ऐप में लॉग कर देगा।

15
उपयोगकर्ता स्पष्ट रूप से कह रहा है कि वह फेसबुक या जीमेल लॉगिन का उपयोग नहीं करना चाहता है।
बर्थो बर्नसमैन

मुझे नहीं लगता कि इस उत्तर को अस्वीकार करना आवश्यक है। शीर्ष टिप्पणी पर एक टिप्पणी पर्याप्त है। इस उत्तर में उपयोगी जानकारी है, और उत्तर-एर ने उक्त जानकारी प्रदान करने के लिए वास्तविक रचनात्मक प्रयास का विस्तार किया है। Why punish that effort? शायद एसओ को ओपी प्रश्न के गलत जवाब के रूप में एक उत्तर को चिह्नित करने का एक तरीका चाहिए। या उपयोगकर्ताओं को सुझाव देने की अनुमति देने के लिए इसे एक अधिक आशंकित प्रश्न में ले जाया जाता है ... या उत्तर से एक नया प्रश्न बनाने के लिए।
वाल्टर स्टबोज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.