تمكين المصادقة في واجهة برمجة تطبيقات الويب الخاصة بك باستخدام Microsoft Azure Active Directory B2C

لتخويل الوصول إلى واجهة برمجة تطبيقات الويب، يمكنك تقديم الطلبات التي تتضمن رمز وصول صالحا لمشكلات متاجرة العمل-المستهلك في Azure Active Directory (Azure AD B2C). توضح لك هذه المقالة كيفية تمكين ترخيص Microsoft Azure Active Directory B2C لواجهة برمجة تطبيقات الويب الخاصة بك. بعد إكمال الخطوات الواردة في هذه المقالة، سيتم السماح للمستخدمين الذين يحصلون على رمز وصول صالح فقط بالاتصال بنقاط نهاية واجهة برمجة تطبيقات الويب الخاصة بك.

المتطلبات الأساسية

قبل أن تبدأ، اقرأ إحدى المقالات التالية، التي تناقش كيفية تكوين المصادقة للتطبيقات التي تستدعي واجهات برمجة تطبيقات الويب. بعد ذلك، اتبع الخطوات الواردة في هذه المقالة لاستبدال نموذج واجهة برمجة تطبيقات الويب بواجهة برمجة تطبيقات الويب الخاصة بك.

نظرة عامة

تضمن المصادقة المستندة إلى الرمز المميز أن الطلبات إلى واجهة برمجة تطبيقات الويب تتضمن رمز وصول صالحا.

يكمل التطبيق الخطوات التالية:

  1. يصادق المستخدمين باستخدام Microsoft Azure Active Directory B2C.

  2. يكتسب رمز وصول مع الأذونات (النطاقات) المطلوبة لنقطة نهاية واجهة برمجة تطبيقات الويب.

  3. يقوم بتمرير رمز الوصول كرمز حامل في رأس المصادقة لطلب HTTP باستخدام هذا التنسيق:

    Authorization: Bearer <access token>
    

تكمل واجهة برمجة تطبيقات الويب الخطوات التالية:

  1. يقرأ رمز الحامل من رأس التفويض في طلب HTTP.

  2. يتحقق من صحة الرمز المميز.

  3. يتحقق من صحة الأذونات (النطاقات) في الرمز المميز.

  4. يقرأ المطالبات التي تم ترميزها في الرمز المميز (اختياري).

  5. يستجيب لطلب HTTP.

تسجيل ملكية التطبيق

لتمكين تطبيقك من تسجيل الدخول باستخدام Azure AD B2C واستدعاء واجهة برمجة تطبيقات الويب، تحتاج إلى تسجيل تطبيقين في دليل Azure AD B2C.

  • يمكّن تسجيل تطبيق الويب أو الهاتف المحمول أو SPA تطبيقك من تسجيل الدخول باستخدام Microsoft Azure Active Directory B2C. تنشئ عملية تسجيل التطبيق معرّف التطبيق، المعروف أيضًا باسم معرّف العميل، والذي يعرّف تطبيقك بشكل فريد (على سبيل المثال، معرّف التطبيق: 1).

  • يتيح تسجيلAPI ويبلتطبيقك الاتصال API ويب المحمية. يعرض التسجيل أذونات الوصول واجهة برمجة تطبيقات الويب (النطاقات). تنشئ عملية تسجيل التطبيق معرّف التطبيق، الذي يعرّف بشكل فريد واجهة برمجة تطبيقات الويب (على سبيل المثال، معرّف التطبيق: 2). منح التطبيق (معرّف التطبيق: 1) أذونات لنطاقات واجهة برمجة تطبيقات الويب (معرّف التطبيق: 2).

يتم وصف تسجيلات التطبيق وبنية التطبيق في الرسم البياني التالي:

Diagram of the application registrations and the application architecture for an app with web API.

جهز بيئة التطوير الخاصة بك

في الأقسام التالية، يمكنك إنشاء مشروع واجهة برمجة تطبيقات ويب جديد. حدد لغة البرمجة الخاصة بك، ASP.NET Core أو Node.js. تأكد من أن لديك جهاز كمبيوتر يعمل بأي من البرامج التالية:

الخطوة 1: إنشاء واجهة برمجة تطبيقات ويب محمية

إنشاء مشروع جديد لواجهة برمجة تطبيقات الويب. أولًا، حدد لغة البرمجة التي تريد استخدامها، ASP.NET CoreاوNode.js.

استخدم الأمرdotnet new. يقوم dotnet newالأمر بإنشاء مجلد جديد يسمىTodoListمع أصول مشروع واجهة برمجة تطبيقات الويب. افتح الدليل، ثم افتحVisual Studio Code.

dotnet new webapi -o TodoList
cd TodoList
code . 

عندما يُطلب منك "إضافة الأصول المطلوبة إلى المشروع"، حدد"نعم".

الخطوة 2: تثبيت التبعيات

أضف مكتبة المصادقة إلى مشروع واجهة برمجة تطبيقات الويب الخاص بك. مكتبة المصادقة يوزع رأس مصادقة HTTP، التحقق من صحة الرمز المميز واستخراج المطالبات. لمزيد من المعلومات، راجع وثائق المكتبة.

لإضافة مكتبة المصادقة، قم بتثبيت الحزمة عن طريق تشغيل الأمر التالي:

dotnet add package Microsoft.Identity.Web

الخطوة 3: ابدأ مكتبة المصادقة

أضف الكود اللازم لبدء مكتبة المصادقة.

افتح Startup.cs ثم أضف usingالإعلانات التالية في بداية الفصل الدراسي:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;

ابحث عن الدالة ConfigureServices(IServiceCollection services) . بعد ذلك، services.AddControllers();قبل سطر التعليمات البرمجية، أضف مقتطف الشفرة التالي:

public void ConfigureServices(IServiceCollection services)
{
    // Adds Microsoft Identity platform (Azure AD B2C) support to protect this Api
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApi(options =>
    {
        Configuration.Bind("AzureAdB2C", options);

        options.TokenValidationParameters.NameClaimType = "name";
    },
    options => { Configuration.Bind("AzureAdB2C", options); });
    // End of the Microsoft Identity platform block    

    services.AddControllers();
}

ابحث عن الدالة Configure . بعد ذلك، مباشرةً بعد سطرapp.UseRouting(); التعليمات البرمجية، أضف مقتطف الشفرة التالي:

app.UseAuthentication();

بعد التغيير، يجب أن تبدو شفرتك مثل المقتطف التالي:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();
    
    // Add the following line 
    app.UseAuthentication();
    // End of the block you add
    
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

الخطوة 4: أضف نقاط النهاية

أضف نقطتي نهاية إلى واجهة برمجة تطبيقات الويب الخاصة بك:

  • /publicنقطة نهاية مجهولة. ترجع نقطة النهاية هذه للتاريخ والوقت الحاليين. استخدمه لتصحيح أخطاء واجهة برمجة تطبيقات الويب الخاصة بك باستخدام مكالمات مجهولة.
  • /helloنقطة نهاية محمية. تقوم نقطة النهاية هذه بإرجاع قيمة nameالمطالبة داخل رمز الوصول.

لإضافة نقطة نهاية مجهولة:

ضمن المجلد /Controllers، أضف ملف PublicController.cs، ثم أضفه إلى القصاصة البرمجية التالية:

using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace TodoList.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class PublicController : ControllerBase
    {
        private readonly ILogger<PublicController> _logger;

        public PublicController(ILogger<PublicController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public ActionResult Get()
        {
            return Ok( new {date = DateTime.UtcNow.ToString()});
        }
    }
}

لإضافة نقطة النهاية المحمية:

ضمن المجلد /Controllers، أضف ملف HelloController.cs، ثم أضفه إلى التعليمات البرمجية التالية:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Web.Resource;

namespace TodoList.Controllers
{
    [Authorize]
    [RequiredScope("tasks.read")]
    [ApiController]
    [Route("[controller]")]
    public class HelloController : ControllerBase
    {

        private readonly ILogger<HelloController> _logger;
        private readonly IHttpContextAccessor _contextAccessor;

        public HelloController(ILogger<HelloController> logger, IHttpContextAccessor contextAccessor)
        {
            _logger = logger;
            _contextAccessor = contextAccessor;
        }

        [HttpGet]
        public ActionResult Get()
        {
            return Ok( new { name = User.Identity.Name});
        }
    }
}

HelloControllerتم تزيين وحدة التحكم بـ AuthorizeAttribute، والذي يحد من الوصول إلى المستخدمين المصادق عليهم فقط.

تم تزيين وحدة التحكم أيضًا بـ[RequiredScope("tasks.read")]. تتحقق سمة النطاق المطلوبة من استدعاء واجهة برمجة تطبيقات الويب بالنطاقات الصحيحةtasks.read.

الخطوة 5: تكوين خادم الويب

في بيئة التطوير، قم بتعيين واجهة برمجة تطبيقات الويب للاستماع إلى رقم منفذ طلبات HTTP أو HTTPS. في هذا المثال، استخدم منفذ HTTP 6000 ومنفذ HTTPS 6001. سيكون عنوان URI الأساسي لواجهة برمجة تطبيقات الويب مخصصًا لـhttp://localhost:6000 HTTP وhttps://localhost:6001 HTTPS.

أضف مقتطف JSON التالي إلى ملف appsettings.json.

"Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://localhost:6000"
      },
      "Https": {
         "Url": "https://localhost:6001"   
        }
    }
  }

الخطوة 6: تكوين واجهة برمجة تطبيقات الويب

أضف التكوينات إلى ملف التكوين. يحتوي الملف على معلومات حول موفر هوية Microsoft Azure Active Directory B2C الخاص بك. يستخدم تطبيق واجهة برمجة تطبيقات الويب هذه المعلومات للتحقق من رمز الوصول الذي يمرره تطبيق الويب كرمز لحاملها.

ضمن المجلد الجذر للمشروع، افتح ملف appsettings.json، ثم أضف الإعدادات التالية:

{
  "AzureAdB2C": {
    "Instance": "https://contoso.b2clogin.com",
    "Domain": "contoso.onmicrosoft.com",
    "ClientId": "<web-api-app-application-id>",
    "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
    "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
  },
  // More settings here
}

في ملف appsettings.json، قم بتحديث الخصائص التالية:

المقطع مفتاح القيمة
AzureAdB2C ‏‏مثيل الجزء الأول من اسم مستأجر Microsoft Azure Active Directory B2C (على سبيل المثال، https://contoso.b2clogin.com).
AzureAdB2C النطاق مستأجر خدمات مجال Microsoft Azure Active Directory B2C اسم المستأجر بالكامل (على سبيل المثال، contoso.onmicrosoft.com).
AzureAdB2C ClientId معرف تطبيق الويب API. في الرسم البياني السابق، إنه التطبيق مع معرف التطبيق: 2. لمعرفة كيفية الحصول على معرف تسجيل تطبيق الويب API، راجع المتطلبات الأساسية.
AzureAdB2C SignUpSignInPolicyId تدفقات المستخدم، أو السياسة المخصصة. لمعرفة كيفية الحصول على تدفق المستخدم أو النهج، راجع المتطلبات الأساسية.

الخطوة 7: قم بتشغيل واختبار واجهة برمجة تطبيقات الويب

أخيرًا، قم بتشغيل واجهة برمجة تطبيقات الويب باستخدام إعدادات بيئة Microsoft Azure Active Directory B2C.

في shell command، ابدأ تطبيق الويب عن طريق تشغيل الأمر التالي:

 dotnet run

يجب أن ترى الناتج التالي، مما يعني أن تطبيقك يعمل وأنه جاهز لتلقي الطلبات.

Now listening on: http://localhost:6000

لإيقاف البرنامج، في غلاف الأوامر، حدد Ctrl + C. يمكنك إعادة تشغيل التطبيق باستخدام الأمرnode app.js.

تلميح

بدلاً من ذلك، لتشغيل dotnet runالأمر، يمكنك استخدام مصحح رمز Visual Studio. يساعد مصحح الأخطاء المدمج في Visual Studio Code على تسريع حلقة التحرير والترجمة والتصحيح.

افتح مستعرضاً وانتقل إلى http://localhost:6000/public. في نافذة المتصفح، سترى النص التالي معروضًا مع التاريخ والوقت الحاليين.

الخطوة 8: اتصل بواجهة برمجة تطبيقات الويب من تطبيقك

حاول الاتصال بنقطة نهاية واجهة برمجة تطبيقات الويب المحمية بدون رمز وصول. افتح مستعرضاً وانتقل إلى http://localhost:6000/hello. ستعيد واجهة برمجة التطبيقات رسالة خطأ HTTP غير مصرح بها، تؤكد أن واجهة برمجة تطبيقات الويب محمية برمز حامل.

استمر في تكوين تطبيقك لاستدعاء واجهة برمجة تطبيقات الويب. للحصول على إرشادات، راجع قسم المتطلبات الأساسية.

شاهد هذا الفيديو للتعرف على بعض أفضل الممارسات عند دمج Microsoft Azure Active Directory B2C مع واجهة برمجة التطبيقات.

الخطوات التالية

احصل على المثال الكامل على GitHub: