কিভাবে এএসপি.নেট এমভিসি 5 এবং ওয়েবে এপিআই 2 তে oauth2 সার্ভার কার্যকর করা যায় [বন্ধ]


127

প্রথমে আমি আমার প্রকল্পটি স্কেচ করব:

আমার ইন্টার্নশিপের জন্য আমাকে একটি বিদ্যমান সিস্টেমে কার্যকারিতা যুক্ত করতে হবে। তৃতীয় পক্ষের ক্লায়েন্টকে অবশ্যই ওএউথ 2 এর মাধ্যমে ব্যবহারকারী কর্তৃক অনুমোদিত হওয়ার পরে অবশ্যই এক্স ওয়েবসার্ভিসেস থেকে ডেটা অ্যাক্সেস করতে সক্ষম হতে হবে। আমি বুঝতে পারি যে আমার একটি 'প্রক্সি ওয়েব পরিষেবা' তৈরি করা দরকার যেখানে ক্লায়েন্ট তার কলগুলি করতে পারে এবং এটি এক্স পরিষেবাগুলিতে কল করে তবে আমি OAuth2 অংশ সম্পর্কে কিছুটা অনিশ্চিত। বেশিরভাগ টিউটোরিয়াল এবং গাইডগুলি ফেসবুক বা গুগল-লগইনের জন্য এএসপি.এনইটি পরিচয় ব্যবহার সম্পর্কে। আমার এটির দরকার নেই, আমার বিদ্যমান শংসাপত্রগুলি ব্যবহার করা দরকার তাই আমার নিজের OAuth2 পরিষেবা তৈরি করা দরকার।

এই সম্পর্কে টিউটোরিয়াল, গাইড বা ব্যাখ্যা খুঁজে পাওয়া আমার পক্ষে কঠিন। আমি OAuth2 এবং কী করা দরকার তা বুঝতে পেরেছি, তবে এর আগে আমি এ জাতীয় কাজটি আগে কখনও করি নি এবং এটি আরম্ভ করা কঠিন বলে মনে হয় না। আমার যে জিনিসটির সন্ধান করা প্রয়োজন তার নিকটতম জিনিসটি এই গিথুব রেপো লিঙ্ক , তবে সমাধানটি তৈরি করে না।

আমার মনে যা ছিল তা হ'ল একটি এএসপি.এনইটি এমভিসি ওয়েবসাইট তৈরি করা যেখানে ক্লায়েন্ট (তৃতীয় পক্ষগুলি) নিজেরাই নিবন্ধন করতে এবং তাদের ক্লায়েন্ট আইডি অর্জন করতে পারে। এএসপি.এনইটি এপিআই দিয়ে আমি এমন এপিআই তৈরি করতে চেয়েছিলাম যা প্রয়োজনীয় টোকেন এবং পরামিতিগুলি নিয়ে যায় এবং তারপরে ডাইন এএক্স পরিষেবাগুলি অ্যাক্সেস করতে পারে।

এটি কি সঠিক বা আমি সম্পূর্ণ ভুল? আপনার নিজের oauth2 সার্ভার / পরিষেবা নির্মাণ সম্পর্কিত কোনও সহায়তা বা লিঙ্কগুলি দুর্দান্ত হবে।


উত্তর:


189

আমি অধ্যায়টির নামগুলি দেখব তবে আমি মনে করি এটি আবার যা আমি অনুসন্ধান করি তা নয় কারণ এটি পরিচয় এবং ফেসবুক / গুগল লগইন পরিচয় সরবরাহকারীদের উপর দৃষ্টি নিবদ্ধ করে।
রবিন

3
কেবলমাত্র অংশ 4 ফেসবুক এবং গুগল সম্পর্কে। আমি দুই মাস আগে এই টিউটোরিয়ালগুলির উপর ভিত্তি করে আমার নিজস্ব প্রমাণীকরণ নিয়ামক প্রয়োগ করেছি। এবং আমি আমার নিজস্ব ব্যবহারকারীর ডাটাবেসও ব্যবহার করছিলাম।
মাইকেলএস

1
আমার আরও একটি প্রশ্ন আছে, এই টোকেনগুলি কোথায় সঞ্চয় হবে? পরিচয় কী পুরোপুরি যত্ন করে?
রবিন


@ মিশেলএস আমি সন্দেহ করেছিলাম যে টোকন ভিত্তিক প্রমাণীকরণের উপায়টি বাকি এপিআইয়ের পক্ষে যথেষ্ট সুরক্ষা। কারণ যদি আমি তার ব্রাউজারে ব্যবহারকারীর টোকেন পেতে পারি। আমি মনে করি এটি অর্জন করা যেতে পারে কারণ টোকেন অনুরোধ শিরোনামে সঞ্চিত Authentication। আমি পেতে চাই / পোস্ট / করা / মুছে ফেলতে চাই সবকিছু করতে পারেন।
জো.ওয়াং

87

আমি কীভাবে কেবল টোকেন অংশটি তৈরি করতে পারি তার নিবন্ধগুলি সন্ধান করতেও আমি সংগ্রাম করেছি। আমি কখনই একটি খুঁজে পেলাম না এবং আমার নিজের লিখলাম। সুতরাং যদি এটি সাহায্য করে:

করণীয়:

  • একটি নতুন ওয়েব অ্যাপ্লিকেশন তৈরি করুন
  • নিম্নলিখিত নিউগেট প্যাকেজ ইনস্টল করুন:
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • একটি ওউইন startupক্লাস যুক্ত করুন

তারপরে index.jsএই বিষয়বস্তুগুলির সাথে একটি এইচটিএমএল এবং একটি জাভাস্ক্রিপ্ট ( ) ফাইল তৈরি করুন :

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খেলা কোথায় আসে ? আপনি কি আপনার ব্যবহারকারীর প্রমাণীকরণের জন্য এএসপি.নেট পরিচয় ব্যবহার করছেন? যদি তা না হয় তবে কি এই নুগেট প্যাকেজটির এখনও দরকার?
ওয়েবওয়ার্ম

1
@ ওয়েবওয়ার্ম - লাইনটি app.UseOAuthBearerTokens(OAuthOptions);ছাড়া কাজ করবে না Microsoft ASP.NET Identity Owin। এটি পদ্ধতিটি চিনতে পারে না UseOAuthBearerTokens
কাই হার্টম্যান

অনুপস্থিত প্যাকেজ: মাইক্রোসফ্ট.উইন.হোস্ট.সিসটেম ওয়েব, মাইক্রোসফ্ট এএসপি.নেট পরিচয় ওউনি
মুহাম্মদ

3
আমি কেবল একটি জিনিস যুক্ত করতে চাই, যদি আপনিও নিউটনসফট করে থাকেন তবে জসন অবৈধ সমাবেশে ত্রুটি পেয়েছে (.NET 4.6 এবং উপরে) তবে দয়া করে নিউটনসফট.জসনকে 11 বা তদুর্ধের সংস্করণে আপডেট করুন।
vis2006

4

আমি একই জিনিসটি নিয়ে গবেষণা করছি এবং সনাক্তকারীকে হোঁচট খেয়েছি যা এএসপি.নেটের শীর্ষে ওআউথ এবং ওপেনআইডি প্রয়োগ করে। এটি এএসপি.এনইটি পরিচয় এবং সত্ত্বার ফ্রেমওয়ার্কের জন্য অধ্যবসায় সমর্থন সহ সদস্যতা পুনরায় বুটের সাথে সংহত করে ।

সুতরাং, আপনার প্রশ্নের উত্তর দেওয়ার জন্য, কীভাবে একটি OAuth এবং ওপেনআইডি সার্ভার সেটআপ করতে হবে তার বিশদ নথিটি দেখুন ।


-12

জিমেইল: ওআউথ

  • এতে যান লিংক
  • আপনার জিমেইল ব্যবহারকারীর পাসওয়ার্ড দিয়ে লগইন করুন
  • উপরের বামদিকে Google মেনুতে ক্লিক করুন
  • এপিআই ম্যানেজার ক্লিক করুন
  • শংসাপত্রগুলিতে ক্লিক করুন
  • শংসাপত্র তৈরি করুন ক্লিক করুন এবং OAuth ক্লায়েন্ট নির্বাচন করুন
  • অ্যাপ্লিকেশন টাইপ হিসাবে ওয়েব অ্যাপ্লিকেশন নির্বাচন করুন এবং নামটি প্রবেশ করুন -> অনুমোদিত পুনর্নির্দেশ URL লিখুন ( উদা : http: // লোকালহস্ট: 53922 / সাইন ইন-গুগল ) -> তৈরি বোতামে ক্লিক করুন। এটি শংসাপত্র তৈরি করবে। প্লিজ একটি নোট তৈরি করুন Client IDএবং Secret ID। শংসাপত্রগুলি পপ আপ বন্ধ করতে অবশেষে ওকে ক্লিক করুন।
  • পরবর্তী গুরুত্বপূর্ণ পদক্ষেপটি সক্ষম করা Google API। বাম ফলকে ওভারভিউতে ক্লিক করুন।
  • Google APIসামাজিক APIs বিভাগের অধীনে ক্লিক করুন ।
  • সক্ষম ক্লিক করুন।

গুগল অংশ থেকে এটি।

আপনার অ্যাপ্লিকেশনে ফিরে আসুন, App_start/Startup.Auth.csনীচের স্নিপেটটি খুলুন এবং অবিরাম করুন

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

আপনি ইতিমধ্যে তৈরি করেছেন শংসাপত্রগুলি থেকে মানগুলি ClientIdএবং আপডেট করুন ।ClientSecretGoogle API

  • আপনার অ্যাপ্লিকেশন চালান
  • লগইন ক্লিক করুন
  • আপনি 'লগ ইন করতে অন্য বিভাগ ব্যবহার করুন' বিভাগের অধীনে গুগল বোতামটি দেখতে পাবেন
  • গুগল বোতামে ক্লিক করুন
  • অ্যাপ্লিকেশন আপনাকে ব্যবহারকারীর নাম এবং পাসওয়ার্ড লিখতে অনুরোধ করবে
  • Gmail ব্যবহারকারীর নাম এবং পাসওয়ার্ড লিখুন এবং সাইন ইন ক্লিক করুন
  • এটি OAuth সম্পাদন করবে এবং আপনার অ্যাপ্লিকেশনটিতে ফিরে আসবে এবং আপনাকে Gmailআইডির সাথে নিবন্ধ করার জন্য অনুরোধ করবে ।
  • Gmailআপনার অ্যাপ্লিকেশন ডাটাবেসে আইডি নিবন্ধিত করতে রেজিস্টার ক্লিক করুন ।
  • আপনি দেখতে পাবেন যে সনাক্তকরণের বিবরণগুলি সাধারণ রেজিস্ট্রেশন হিসাবে শীর্ষে উপস্থিত হবে
  • Gmail এর মাধ্যমে লগআউট এবং আবার লগইন করার চেষ্টা করুন। এটি আপনাকে স্বয়ংক্রিয়ভাবে অ্যাপে লগ করবে।

15
ব্যবহারকারী স্পষ্টতই উল্লেখ করছেন যে তিনি ফেসবুক বা জিমেইল লগইন ব্যবহার করতে চান না।
বার্থো বার্নসম্যান

আমি মনে করি না যে এই উত্তরটি হ্রাস করা প্রয়োজন। শীর্ষ মন্তব্য একটি upvote যথেষ্ট। এই উত্তরে দরকারী তথ্য রয়েছে, এবং উত্তর-এর তথ্যের জন্য প্রকৃত সৃজনশীল প্রচেষ্টা ব্যয় করেছে। Why punish that effort? সম্ভবত ওএস প্রশ্নের উত্তর ভুলভাবে উত্তর হিসাবে পতাকাঙ্কিত করার জন্য একটি উপায় প্রয়োজন। অথবা ব্যবহারকারীদের এটিকে আরও অ্যাপোপ্রেট প্রশ্নে স্থানান্তরিত করার পরামর্শ দেওয়ার অনুমতি দিতে ... বা উত্তর থেকে একটি নতুন প্রশ্ন তৈরি করতে।
ওয়াল্টার স্ট্যাবোজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.