تمكين المصادقة في واجهة برمجة تطبيقات الويب الخاصة بك باستخدام Microsoft Azure Active Directory B2C
مقالة
لتخويل الوصول إلى واجهة برمجة تطبيقات الويب، يمكنك تقديم الطلبات التي تتضمن رمز وصول صالحا لمشكلات متاجرة العمل-المستهلك في Azure Active Directory (Azure AD B2C). توضح لك هذه المقالة كيفية تمكين ترخيص Microsoft Azure Active Directory B2C لواجهة برمجة تطبيقات الويب الخاصة بك. بعد إكمال الخطوات الواردة في هذه المقالة، سيتم السماح للمستخدمين الذين يحصلون على رمز وصول صالح فقط بالاتصال بنقاط نهاية واجهة برمجة تطبيقات الويب الخاصة بك.
المتطلبات الأساسية
قبل أن تبدأ، اقرأ إحدى المقالات التالية، التي تناقش كيفية تكوين المصادقة للتطبيقات التي تستدعي واجهات برمجة تطبيقات الويب. بعد ذلك، اتبع الخطوات الواردة في هذه المقالة لاستبدال نموذج واجهة برمجة تطبيقات الويب بواجهة برمجة تطبيقات الويب الخاصة بك.
تضمن المصادقة المستندة إلى الرمز المميز أن الطلبات إلى واجهة برمجة تطبيقات الويب تتضمن رمز وصول صالحا.
يكمل التطبيق الخطوات التالية:
يصادق المستخدمين باستخدام Microsoft Azure Active Directory B2C.
يكتسب رمز وصول مع الأذونات (النطاقات) المطلوبة لنقطة نهاية واجهة برمجة تطبيقات الويب.
يقوم بتمرير رمز الوصول كرمز حامل في رأس المصادقة لطلب HTTP باستخدام هذا التنسيق:
HTTP
Authorization: Bearer <access token>
تكمل واجهة برمجة تطبيقات الويب الخطوات التالية:
يقرأ رمز الحامل من رأس التفويض في طلب HTTP.
يتحقق من صحة الرمز المميز.
يتحقق من صحة الأذونات (النطاقات) في الرمز المميز.
يقرأ المطالبات التي تم ترميزها في الرمز المميز (اختياري).
يستجيب لطلب HTTP.
تسجيل ملكية التطبيق
لتمكين تطبيقك من تسجيل الدخول باستخدام Azure AD B2C واستدعاء واجهة برمجة تطبيقات الويب، تحتاج إلى تسجيل تطبيقين في دليل Azure AD B2C.
يمكّن تسجيل تطبيق الويب أو الهاتف المحمول أو SPA تطبيقك من تسجيل الدخول باستخدام Microsoft Azure Active Directory B2C. تنشئ عملية تسجيل التطبيق معرّف التطبيق، المعروف أيضًا باسم معرّف العميل، والذي يعرّف تطبيقك بشكل فريد (على سبيل المثال، معرّف التطبيق: 1).
يتيح تسجيلAPI ويبلتطبيقك الاتصال API ويب المحمية. يعرض التسجيل أذونات الوصول واجهة برمجة تطبيقات الويب (النطاقات). تنشئ عملية تسجيل التطبيق معرّف التطبيق، الذي يعرّف بشكل فريد واجهة برمجة تطبيقات الويب (على سبيل المثال، معرّف التطبيق: 2). منح التطبيق (معرّف التطبيق: 1) أذونات لنطاقات واجهة برمجة تطبيقات الويب (معرّف التطبيق: 2).
يتم وصف تسجيلات التطبيق وبنية التطبيق في الرسم البياني التالي:
جهز بيئة التطوير الخاصة بك
في الأقسام التالية، يمكنك إنشاء مشروع واجهة برمجة تطبيقات ويب جديد. حدد لغة البرمجة الخاصة بك، ASP.NET Core أو Node.js. تأكد من أن لديك جهاز كمبيوتر يعمل بأي من البرامج التالية:
استخدم الأمرdotnet new. يقوم dotnet newالأمر بإنشاء مجلد جديد يسمىTodoListمع أصول مشروع واجهة برمجة تطبيقات الويب. افتح الدليل، ثم افتحVisual Studio Code.
.NET CLI
dotnetnew webapi -o TodoList
cd TodoList
code .
عندما يُطلب منك "إضافة الأصول المطلوبة إلى المشروع"، حدد"نعم".
استخدم Express لـ Node.js لبناء واجهة برمجة تطبيقات الويب. لإنشاء واجهة برمجة تطبيقات ويب، قم بما يلي:
قم بإنشاء مجلد جديد باسم TodoList.
ضمن مجلد TodoList، أنشئ ملفًا باسم app.js.
في قذيفة الأوامر، قم بتشغيلnpm init -y. يقوم هذا الأمر بإنشاء package.js افتراضي على ملف لمشروع Node.js.
في الأمر shell، قم بتشغيل npm install express. يثبّت هذا الأمر إطار عمل Express.
الخطوة 2: تثبيت التبعيات
أضف مكتبة المصادقة إلى مشروع واجهة برمجة تطبيقات الويب الخاص بك. مكتبة المصادقة يوزع رأس مصادقة HTTP، التحقق من صحة الرمز المميز واستخراج المطالبات. لمزيد من المعلومات، راجع وثائق المكتبة.
افتح Startup.cs ثم أضف usingالإعلانات التالية في بداية الفصل الدراسي:
C#
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
ابحث عن الدالة ConfigureServices(IServiceCollection services) . بعد ذلك، services.AddControllers();قبل سطر التعليمات البرمجية، أضف مقتطف الشفرة التالي:
C#
publicvoidConfigureServices(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(); التعليمات البرمجية، أضف مقتطف الشفرة التالي:
C#
app.UseAuthentication();
بعد التغيير، يجب أن تبدو شفرتك مثل المقتطف التالي:
C#
publicvoidConfigure(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();
});
}
أضف كود JavaScript التالي إلى ملف app.js الخاص بك.
JavaScript
// Import the required librariesconst express = require('express');
const morgan = require('morgan');
const passport = require('passport');
const config = require('./config.json');
// Import the passport Azure AD libraryconst BearerStrategy = require('passport-azure-ad').BearerStrategy;
// Set the Azure AD B2C optionsconst options = {
identityMetadata: `https://${config.credentials.tenantName}.b2clogin.com/${config.credentials.tenantName}.onmicrosoft.com/${config.policies.policyName}/${config.metadata.version}/${config.metadata.discovery}`,
clientID: config.credentials.clientID,
audience: config.credentials.clientID,
issuer: config.credentials.issuer,
policyName: config.policies.policyName,
isB2C: config.settings.isB2C,
scope: config.resource.scope,
validateIssuer: config.settings.validateIssuer,
loggingLevel: config.settings.loggingLevel,
passReqToCallback: config.settings.passReqToCallback
}
// Instantiate the passport Azure AD library with the Azure AD B2C optionsconst bearerStrategy = new BearerStrategy(options, (token, done) => {
// Send user info using the second argument
done(null, { }, token);
}
);
// Use the required librariesconst app = express();
app.use(morgan('dev'));
app.use(passport.initialize());
passport.use(bearerStrategy);
//enable CORS (for testing only -remove in production/deployment)
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Authorization, Origin, X-Requested-With, Content-Type, Accept');
next();
});
الخطوة 4: أضف نقاط النهاية
أضف نقطتي نهاية إلى واجهة برمجة تطبيقات الويب الخاصة بك:
/publicنقطة نهاية مجهولة. ترجع نقطة النهاية هذه للتاريخ والوقت الحاليين. استخدمه لتصحيح أخطاء واجهة برمجة تطبيقات الويب الخاصة بك باستخدام مكالمات مجهولة.
/helloنقطة نهاية محمية. تقوم نقطة النهاية هذه بإرجاع قيمة nameالمطالبة داخل رمز الوصول.
ضمن المجلد /Controllers، أضف ملف HelloController.cs، ثم أضفه إلى التعليمات البرمجية التالية:
C#
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Web.Resource;
namespaceTodoList.Controllers
{
[Authorize]
[RequiredScope("tasks.read")]
[ApiController]
[Route("[controller]")]
publicclassHelloController : ControllerBase
{
privatereadonly ILogger<HelloController> _logger;
privatereadonly IHttpContextAccessor _contextAccessor;
publicHelloController(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.
في ملف app.js، أضف كود JavaScript التالي:
JavaScript
// API protected endpoint
app.get('/hello',
passport.authenticate('oauth-bearer', {session: false}),
(req, res) => {
console.log('Validated claims: ', req.authInfo);
// Service relies on the name claim.
res.status(200).json({'name': req.authInfo['name']});
}
);
/helloتستدعي نقطة النهاية الوظيفة passport.authenticate()أولاً. تقيد وظيفة المصادقة الوصول إلى المستخدمين المصدق عليهم فقط.
تتحقق وظيفة المصادقة أيضًا من استدعاء واجهة برمجة تطبيقات الويب بالنطاقات الصحيحة. النطاقات المسموح بها موجودة في ملف التكوين.
الخطوة 5: تكوين خادم الويب
في بيئة التطوير، قم بتعيين واجهة برمجة تطبيقات الويب للاستماع إلى رقم منفذ طلبات HTTP أو HTTPS. في هذا المثال، استخدم منفذ HTTP 6000 ومنفذ HTTPS 6001. سيكون عنوان URI الأساسي لواجهة برمجة تطبيقات الويب مخصصًا لـhttp://localhost:6000 HTTP وhttps://localhost:6001 HTTPS.
// Starts listening on port 6000const port = process.env.PORT || 6000;
app.listen(port, () => {
console.log('Listening on port ' + port);
});
الخطوة 6: تكوين واجهة برمجة تطبيقات الويب
أضف التكوينات إلى ملف التكوين. يحتوي الملف على معلومات حول موفر هوية Microsoft Azure Active Directory B2C الخاص بك. يستخدم تطبيق واجهة برمجة تطبيقات الويب هذه المعلومات للتحقق من رمز الوصول الذي يمرره تطبيق الويب كرمز لحاملها.
ضمن المجلد الجذر للمشروع، افتح ملف appsettings.json، ثم أضف الإعدادات التالية:
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
تدفقات المستخدم، أو السياسة المخصصة. لمعرفة كيفية الحصول على تدفق المستخدم أو النهج، راجع المتطلبات الأساسية.
ضمن المجلد الجذر للمشروع، أنشئ ملف config.json ، ثم أضفه إلى مقتطف JSON التالي:
معرف تطبيق الويب API. في الرسم البياني السابق، إنه التطبيق مع معرف التطبيق: 2. لمعرفة كيفية الحصول على معرف تسجيل تطبيق الويب API، راجع المتطلبات الأساسية.
بيانات الاعتماد
المُصدر
قيمة مطالبة مُصدر الرمزiss المميز. بشكل افتراضي، يقوم Microsoft Azure Active Directory B2C بإرجاع الرمز المميز بالتنسيق التالي:https://<your-tenant-name>.b2clogin.com/<your-tenant-ID>/v2.0/. استبدل <your-tenant-name> بالجزء الأول من اسم مستأجر متاجرة عمل-مستهلك في Azure Active Directory. استبدل <your-tenant-ID> بـ معرّف مستأجر متاجرة عمل-مستهلك في Azure Active Directory.
النُهج
policyName
تدفقات المستخدم، أو السياسة المخصصة. لمعرفة كيفية الحصول على تدفق المستخدم أو النهج، راجع المتطلبات الأساسية.
resource
النطاق
نطاقات تسجيل تطبيق الويب API الخاص بك. لمعرفة كيفية الحصول على نطاق واجهة برمجة تطبيقات الويب، راجع المتطلبات الأساسية.
في shell command، ابدأ تطبيق الويب عن طريق تشغيل الأمر التالي:
bush
dotnet run
يجب أن ترى الناتج التالي، مما يعني أن تطبيقك يعمل وأنه جاهز لتلقي الطلبات.
Now listening on: http://localhost:6000
لإيقاف البرنامج، في غلاف الأوامر، حدد Ctrl + C. يمكنك إعادة تشغيل التطبيق باستخدام الأمرnode app.js.
تلميح
بدلاً من ذلك، لتشغيل dotnet runالأمر، يمكنك استخدام مصحح رمز Visual Studio. يساعد مصحح الأخطاء المدمج في Visual Studio Code على تسريع حلقة التحرير والترجمة والتصحيح.
افتح مستعرضاً وانتقل إلى http://localhost:6000/public. في نافذة المتصفح، سترى النص التالي معروضًا مع التاريخ والوقت الحاليين.
في shell command، ابدأ تطبيق الويب عن طريق تشغيل الأمر التالي:
bush
node app.js
يجب أن ترى الناتج التالي، مما يعني أن تطبيقك يعمل وأنه جاهز لتلقي الطلبات.
Example app listening on port 6000!
لإيقاف البرنامج، في غلاف الأوامر، حدد Ctrl + C. يمكنك إعادة تشغيل التطبيق باستخدام الأمرnode app.js.
تلميح
بدلاً من ذلك، لتشغيلnode app.jsالأمر، استخدم مصحح رمز Visual Studio. يساعد مصحح الأخطاء المدمج في Visual Studio Code على تسريع حلقة التحرير والترجمة والتصحيح.
افتح مستعرضاً وانتقل إلى http://localhost:6000/public. في نافذة المتصفح، سترى النص التالي معروضًا مع التاريخ والوقت الحاليين.
الخطوة 8: اتصل بواجهة برمجة تطبيقات الويب من تطبيقك
حاول الاتصال بنقطة نهاية واجهة برمجة تطبيقات الويب المحمية بدون رمز وصول. افتح مستعرضاً وانتقل إلى http://localhost:6000/hello. ستعيد واجهة برمجة التطبيقات رسالة خطأ HTTP غير مصرح بها، تؤكد أن واجهة برمجة تطبيقات الويب محمية برمز حامل.
استمر في تكوين تطبيقك لاستدعاء واجهة برمجة تطبيقات الويب. للحصول على إرشادات، راجع قسم المتطلبات الأساسية.
شاهد هذا الفيديو للتعرف على بعض أفضل الممارسات عند دمج Microsoft Azure Active Directory B2C مع واجهة برمجة التطبيقات.
When building apps for work, you typically integrate with secured APIs. Learn about the two common ways of how APIs are secured – API key and OAuth2, and how to integrate with them when building an API plugin for declarative agents that run in Microsoft 365 Copilot.