এএসপি.নেট ওয়েব এপিআই-তে ব্যবহারকারী প্রমাণীকরণ


150

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

আমি বিস্মিত হয়েছি যে গুগলিংয়ের বেশ কয়েক ঘন্টা পরে Authorizeআমার ApiControllerপদ্ধতিগুলির উপরের বৈশিষ্ট্যটি ব্যবহার করার জন্য লগইন স্ক্রিন থেকে কোনও ব্যবহারকারীকে কীভাবে প্রমাণীকরণ করব তার স্পষ্ট উদাহরণ আমি কীভাবে খুঁজে পাচ্ছি না ।

এটি কোনও প্রশ্ন নয় তবে কীভাবে এটি সঠিকভাবে করা যায় তার উদাহরণের জন্য অনুরোধ। আমি নিম্নলিখিত পৃষ্ঠাগুলি তাকিয়েছি:

যদিও এটি অননুমোদিত অনুরোধগুলি কীভাবে পরিচালনা করতে হয় তা ব্যাখ্যা করে, এটি LoginControllerব্যবহারকারীর শংসাপত্রগুলির জন্য জিজ্ঞাসা করার জন্য এবং সেগুলি বৈধ করার জন্য এগুলি বা এর মতো কিছু পরিষ্কারভাবে প্রদর্শন করে না ।

কেউ খুব সহজ উদাহরণ লিখতে ইচ্ছুক বা আমাকে সঠিক দিকে নির্দেশ করুন, দয়া করে?

ধন্যবাদ।


1
: আমি এই একই প্রশ্ন ধরনের উত্তর stackoverflow.com/questions/11775594/...
cuongle

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

এছাড়াও আমার উত্তর দেখুন stackoverflow.com
বরুণ চ্যাটার্জি

উত্তর:


176

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

কারণ আপনি এই দুটি ধারণা সম্পর্কে বিভ্রান্ত হচ্ছেন:

  • প্রমাণীকরণ হ'ল প্রক্রিয়া যার মাধ্যমে সিস্টেমগুলি নিরাপদে তাদের ব্যবহারকারীদের সনাক্ত করতে পারে। প্রমাণীকরণ সিস্টেমগুলি প্রশ্নের উত্তর সরবরাহ করে:

    • ব্যবহারকারী কে?
    • ব্যবহারকারী কি আসলে তিনি নিজেকে প্রতিনিধিত্ব করেন?
  • অনুমোদন হ'ল প্রক্রিয়া যার মাধ্যমে একটি সিস্টেম নির্ধারণ করে যে কোনও নির্দিষ্ট অনুমোদনপ্রাপ্ত ব্যবহারকারীকে সিস্টেম দ্বারা নিয়ন্ত্রিত সংস্থানগুলি সুরক্ষিত রাখতে হবে what উদাহরণস্বরূপ, একটি ডাটাবেস ম্যানেজমেন্ট সিস্টেমটি এমনভাবে নকশাকৃত করা যেতে পারে যাতে নির্দিষ্ট নির্দিষ্ট ব্যক্তিদের ডেটাবেস থেকে তথ্য পুনরুদ্ধার করার ক্ষমতা দেওয়া হয় তবে ডেটাবেসে সঞ্চিত ডেটা পরিবর্তন করার ক্ষমতা না করে অন্য ব্যক্তিকে ডেটা পরিবর্তন করার ক্ষমতা দেওয়া হয়। অনুমোদন সিস্টেমগুলি প্রশ্নের উত্তর সরবরাহ করে:

    • ব্যবহারকারী এক্স কি রিসোর্স অ্যাক্সেসের জন্য অনুমোদিত?
    • ব্যবহারকারী এক্স অপারেশন পি সঞ্চালনের জন্য অনুমোদিত?
    • ব্যবহারকারী এক্স কি রিসোর্স আর এ অপারেশন পি সম্পাদনের জন্য অনুমোদিত?

AuthorizeMVC মধ্যে অ্যাট্রিবিউট উদাহরণস্বরূপ এক্সেস নিয়ম প্রযোজ্য হয়, ব্যবহার করা হয়:

 [System.Web.Http.Authorize(Roles = "Admin, Super User")]
 public ActionResult AdministratorsOnly()
 {
     return View();
 }

উপরে নিয়ম শুধুমাত্র অনুমতি দেবে ব্যবহারকারীদের এডমিন এবং সুপার ইউজার ভূমিকা পদ্ধতি অ্যাক্সেস করতে

এই নিয়মগুলি locationউপাদানটি ব্যবহার করে ওয়েবকনফিগ ফাইলেও সেট করা যেতে পারে । উদাহরণ:

  <location path="Home/AdministratorsOnly">
    <system.web>
      <authorization>
        <allow roles="Administrators"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

যাইহোক, এই অনুমোদনের বিধিগুলি কার্যকর করার আগে আপনাকে বর্তমান ওয়েব সাইটে প্রমাণীকরণ করতে হবে

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

এখান থেকে, আমরা সমস্যাটিকে দুটি ভাগে ভাগ করতে পারি:

  • একই ওয়েব অ্যাপ্লিকেশনের মধ্যে থাকা ওয়েব এপিআই পরিষেবাদি ব্যবহার করার সময় ব্যবহারকারীদের প্রমাণীকরণ করুন

    এটি হ'ল সহজ উপায়, কারণ আপনি এএসপি.নেটে প্রমাণীকরণের উপর নির্ভর করবেন

    এটি একটি সহজ উদাহরণ:

    Web.config

    <authentication mode="Forms">
      <forms
        protection="All"
        slidingExpiration="true"
        loginUrl="account/login"
        cookieless="UseCookies"
        enableCrossAppRedirects="false"
        name="cookieName"
      />
    </authentication>
    

    ব্যবহারকারীদের অ্যাকাউন্ট / লগইন রুটে পুনঃনির্দেশিত করা হবে , সেখানে আপনি ব্যবহারকারীর শংসাপত্রগুলির জন্য জিজ্ঞাসা করতে কাস্টম নিয়ন্ত্রণগুলি সরবরাহ করবেন এবং তারপরে আপনি ব্যবহার করে প্রমাণীকরণ কুকি সেট করবেন:

        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }
    
        // If we got this far, something failed, redisplay form
        return View(model);
    
  • ক্রস - প্ল্যাটফর্ম প্রমাণীকরণ

    এই ক্ষেত্রে যখন আপনি কেবল ওয়েব অ্যাপ্লিকেশনটির মধ্যে কেবল ওয়েব এপিআই পরিষেবাদি প্রকাশ করছেন , তখন আপনার কাছে আরও একটি ক্লায়েন্ট সেবা গ্রহণ করবে, ক্লায়েন্টটি অন্য ওয়েব অ্যাপ্লিকেশন বা কোনও নেট নেট অ্যাপ্লিকেশন (উইন ফর্ম, ডাব্লুপিএফ, কনসোল, উইন্ডোজ পরিষেবা, ইত্যাদি)

    উদাহরণস্বরূপ অনুমান করুন যে আপনি একই নেটওয়ার্ক ডোমেনে (একটি ইন্ট্রানেটের মধ্যে) অন্য ওয়েব অ্যাপ্লিকেশন থেকে ওয়েব API পরিষেবা গ্রাস করবেন, এক্ষেত্রে আপনি এএসপি.নেট দ্বারা সরবরাহিত উইন্ডোজ প্রমাণীকরণের উপর নির্ভর করতে পারেন।

    <authentication mode="Windows" />

    যদি আপনার পরিষেবাগুলি ইন্টারনেটে প্রকাশিত হয়, তবে আপনাকে প্রতিটি ওয়েব এপিআই সার্ভিসে প্রমাণীকরণযোগ্য টোকেনগুলি পাস করতে হবে।

    আরও তথ্যের জন্য, নিম্নলিখিত নিবন্ধগুলিতে একটি লুট নিন:


3
কি দারুন! এটাই আমি উত্তর বলি। সুতরাং, উপসংহারে। আমি নিম্নলিখিতটি করার পরিকল্পনা করছি: ১. এইচটিটিপিএসের মাধ্যমে ব্যবহারকারীর নাম এবং পাসওয়ার্ড প্রাপ্ত এবং লগইন ফলাফল এবং টোকেন প্রদান করে এমন একটি লগইন পদ্ধতি সহ একটি অ্যাকাউন্ট নিয়ামক তৈরি করুন। ২. ক্লায়েন্টটি টোকন সংরক্ষণ করে এবং ওয়েব সার্ভারের মাধ্যমে যাচাই করা অনুরোধে এটি শিরোনাম হিসাবে (আর এইচটিটিপিএস নয়) প্রেরণ করে। এটা কি ভাল পন্থা? তারপরে আমার চূড়ান্ত সন্দেহ হ'ল কীভাবে টোকেন টেম্পারিং এবং মেয়াদোত্তীর্ণতা নিয়ন্ত্রণ করা যায়। এটা কি সম্ভব?
লুইস আগুইলার

6
@ জুপোল আমি মনে করি যে আমি অনেক ওয়েব এপিআই বিকাশকারীদের পক্ষে কথা বলি, আমি ফর্ম প্রমাণীকরণ ব্যবহার করতে পারি না কারণ আমার কোনও ওয়েবসাইট নেই এবং ক্লায়েন্টরা ব্রাউজার ব্যবহার করছে না, বা আমি ইন্টিগ্রেটেড প্রমাণীকরণও ব্যবহার করতে পারি না কারণ ব্যবহারকারীরা বিশ্বের যে কোনও ডিভাইসে থাকতে পারে ( অতএব ওয়েব এপিআই), তাই আমি কী ব্যবহার করব?
মার্কমনল

21
আমি বুঝতে পারছি না কেন এই উত্তরটি এত বেশি উত্সাহ দেয়। এটি এএসপি.নেট ওয়েব এপিআই সম্পর্কে নয় তবে এএসপি.নেট এমভিসি সম্পর্কে।
বাসটিয়েন ভান্ডামমে

3
আমি বি 413 এর মন্তব্যটির পুনরাবৃত্তি করতে এবং এটি উল্লেখ করতে চাই যে এই প্রশ্নটি বিশেষত ওয়েব এপিআইয়ের জন্য জিজ্ঞাসা করেছে
জুলিয়েন

6
এটি কি এসও-তে সবচেয়ে বেশি ভোট দেওয়া 'ভুল' উত্তর? উত্তরটি আসলে ওয়েব এপিআই সম্পর্কে কথা বলে না যা এমভিসি ওয়েব অ্যাপ্লিকেশন থেকে খুব আলাদা! @ বি 413 এর মত আমি পুরোপুরি হতবাক!
stt106

15

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

void EnsureAuthenticated(string role)
{
    string[] parts = UTF8Encoding.UTF8.GetString(Convert.FromBase64String(Request.Headers.Authorization.Parameter)).Split(':');
    if (parts.Length != 2 || !Membership.ValidateUser(parts[0], parts[1]))
        throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "No account with that username and password"));
    if (role != null && !Roles.IsUserInRole(parts[0], role))
        throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "An administrator account is required"));
}

ক্লায়েন্টের পক্ষ থেকে, এই সহায়ক HttpClientজায়গায় প্রমাণীকরণ শিরোনাম সহ একটি তৈরি করে :

static HttpClient CreateBasicAuthenticationHttpClient(string userName, string password)
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(userName + ':' + password)));
    return client;
}

কেবলমাত্র মন্তব্য করতে চেয়েছিলাম যে আমি শিরোনামগুলিতে শংসাপত্রগুলি পাস করার জন্য শিল্পের মানটি ব্যবহার করার সহজ উপায় খুঁজছিলাম। এই উদাহরণটি সার্ভার এবং ক্লায়েন্ট উভয় পক্ষের থেকেই বেসিকগুলি দেখিয়েছে এবং আমার যা প্রয়োজন তা ছিল।
দা_জোককার 16 '14

9

আমি একটি এমভিসি 5 / ওয়েব এপিআই প্রকল্পে কাজ করছি এবং ওয়েব এপিআই পদ্ধতিগুলির জন্য অনুমোদন পেতে সক্ষম হওয়া প্রয়োজন। যখন আমার সূচক ভিউটি প্রথম লোড হয় আমি 'টোকেন' ওয়েব এপিআই পদ্ধতিতে একটি কল করি যা আমি বিশ্বাস করি যা স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল।

টোকেন পেতে ক্লায়েন্ট সাইড কোড (কফিস্ক্রিপ্ট):

getAuthenticationToken = (username, password) ->
    dataToSend = "username=" + username + "&password=" + password
    dataToSend += "&grant_type=password"
    $.post("/token", dataToSend).success saveAccessToken

সফল হলে নিম্নলিখিতগুলি বলা হয়, যা স্থানীয়ভাবে প্রমাণীকরণ টোকেন সংরক্ষণ করে:

saveAccessToken = (response) ->
    window.authenticationToken = response.access_token

তারপরে যদি আমাকে এমন একটি ওয়েব এপিএক্স পদ্ধতিতে অ্যাজাক্স কল করার প্রয়োজন হয় যা [অনুমোদন] ট্যাগযুক্ত আমি কেবল আমার অ্যাজাক্স কলটিতে নীচের শিরোনামটি যুক্ত করি:

{ "Authorization": "Bearer " + window.authenticationToken }

কোথা থেকে response.access_tokenআসে। আপনি কি এটি # সি কোড থেকে সেট করছেন ..?
শাশ্বত

'প্রতিক্রিয়া' অবজেক্টটি 'টোকেন' পদ্ধতি দ্বারা ফিরে আসে।
ProfNimrod

আমি ভূমিকায় দেখিনি। এই পদ্ধতিটি আপনাকে কেবল অ্যাক্সেস-টোকেন দেয় যাতে আপনি [অনুমোদন] ট্যাগ দিয়ে সজ্জিত ওয়েবএপি পদ্ধতিগুলিতে কল করতে পারেন। সম্ভবত, আপনি যখন এই পদ্ধতিগুলির কোনও কল করেন তখন আপনি ভূমিকাগুলির জন্য পরীক্ষা করতে পারেন। stackoverflow.com/questions/19689570/mvc-5-check-user-rol সাহায্য করতে পারে।
ProfNimrod

এবং এই সমাধানে আপনি কোথায় আসলে আপনার ব্যবহারকারীকে প্রমাণীকরণ করবেন?
ক্রেগ ব্রেট 13

/ টোকেন এন্ডপয়েন্টটি কোনও নতুন ওয়েব এপিআই প্রকল্পের জন্য স্বয়ংক্রিয়ভাবে তৈরি করা হয়। এর পিছনে কোডটি যেখানে ব্যবহারকারীকে সত্যায়িত করা হয়। আপনি যদি বিদ্যমান এমভিসি প্রকল্পে কোনও ওয়েব এপিআই নিয়ন্ত্রণকারী যুক্ত করেন তবে এটি কিছুটা জটিল।
ProfNimrod
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.