الوصول إلى معلومات المستخدم في تطبيقات ويب Azure الثابتة

توفر Azure Static Web Apps معلومات المستخدم المتعلقة بالمصادقة عبر نقطة نهاية الوصول المباشرووظائف واجهة برمجة التطبيقات.

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

البيانات الرئيسية للعميل

يعرض كائن البيانات الرئيسي للعميل معلومات تعريف المستخدم لتطبيقك. يتم عرض الخصائص التالية في كائن العميل الرئيسي:

الخاصية الوصف
identityProvider اسم موفر الهوية.
userId معرف فريد خاص بتطبيقات الويب الثابتة ل Azure للمستخدم.
  • القيمة فريدة من نوعها على أساس كل تطبيق. على سبيل المثال، يقوم المستخدم نفسه بإرجاع قيمة مختلفة userId على مورد تطبيقات ويب ثابت مختلف.
  • تستمر القيمة طوال عمر المستخدم. إذا قمت بحذف المستخدم نفسه وإضافته مرة أخرى إلى التطبيق، إنشاء مستخدم جديد userId .
userDetails اسم المستخدم أو عنوان البريد الإلكتروني للمستخدم. يقوم بعض موفري الخدمات بإرجاع عنوان البريد الإلكتروني للمستخدم، بينما يرسل آخرون مقبض المستخدم.
userRoles مجموعة من الأدوار المعينة للمستخدم.
claims مجموعة من المطالبات التي تم إرجاعها بواسطة موفر المصادقة المخصص.

المثال التالي هو كائن أساسي نموذجي للعميل:

{
  "identityProvider": "github",
  "userId": "d75b260a64504067bfc5b2905e3b8182",
  "userDetails": "username",
  "userRoles": ["anonymous", "authenticated"],
  "claims": [{
    "typ": "name",
    "val": "Azure Static Web Apps"
  }]
}

نقطة نهاية الوصول المباشر

يمكنك إرسال GET طلب إلى المسار والحصول على وصول مباشر إلى /.auth/me البيانات الرئيسية للعميل. عندما تعتمد حالة العرض على بيانات التفويض، استخدم هذا النهج للحصول على أفضل أداء.

بالنسبة للمستخدمين الذين قاموا بتسجيل الدخول، تحتوي الاستجابة على كائن JSON أساسي للعميل. ترجع الطلبات من المستخدمين غير المصادقين null.

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

async function getUserInfo() {
  const response = await fetch('/.auth/me');
  const payload = await response.json();
  const { clientPrincipal } = payload;
  return clientPrincipal;
}

console.log(getUserInfo());

دوال واجهة برمجة التطبيقات

تتمتع وظائف واجهة برمجة التطبيقات المتوفرة في تطبيقات الويب الثابتة عبر الواجهة الخلفية لوظائف Azure بالوصول إلى نفس معلومات المستخدم مثل تطبيق العميل. على الرغم من أن واجهة برمجة التطبيقات تتلقى معلومات يمكن للمستخدم التعرف عليها، إلا أنها لا تجري عمليات التحقق الخاصة بها إذا تمت مصادقة المستخدم أو إذا كانت تتطابق مع دور مطلوب. يتم تعريف قواعد التحكم في الوصول في staticwebapp.config.json الملف.

يتم تمرير البيانات الأساسية للعميل إلى وظائف واجهة برمجة التطبيقات في x-ms-client-principal رأس الطلب. يتم إرسال البيانات الأساسية للعميل كسلسلة مشفرة Base64 تحتوي على كائن JSON متسلسل.

تظهر الدالة المثال التالي كيفية قراءة معلومات المستخدم وإعادتها.

module.exports = async function (context, req) {
  const header = req.headers['x-ms-client-principal'];
  const encoded = Buffer.from(header, 'base64');
  const decoded = encoded.toString('ascii');

  context.res = {
    body: {
      clientPrincipal: JSON.parse(decoded),
    },
  };
};

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

async function getUser() {
  const response = await fetch('/api/user');
  const payload = await response.json();
  const { clientPrincipal } = payload;
  return clientPrincipal;
}

console.log(await getUser());

عند تسجيل دخول مستخدم، x-ms-client-principal تتم إضافة الرأس إلى طلبات الحصول على معلومات المستخدم عبر العقد الطرفية لتطبيقات الويب الثابتة.

1 واجهة برمجة تطبيقات الجلب وعامل التشغيل الانتظار غير معتمدين في Internet Explorer.

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