طلب الرمز المميز للوصول في Microsoft Azure Active Directory B2C

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

توضح هذه المقالة كيفية طلب الرمز المميز للوصول لتطبيق ويب وواجهة برمجة تطبيقات الويب. لمزيد من المعلومات حول الرموز المميزة للوصول في Azure AD B2C راجع النظرة العامة للرموز المميزة في Azure Active Directory B2C.

ملاحظة

سلاسل واجهة برمجة تطبيقات الويب (نيابة عن) غير مدعومة من قبل Azure AD B2C - تتضمن العديد من البنيات واجهة برمجة تطبيقات الويب التي تحتاج إلى استدعاء واجهة برمجة تطبيقات ويب أخرى في المراحل النهائية، وكلاهما مؤمن بواسطة Azure AD B2C. هذا السيناريو شائع في العملاء الذين لديهم واجهة برمجة تطبيقات ويب في الخلفية، والتي بدورها تستدعي خدمة أخرى. يمكن دعم سيناريو واجهة برمجة تطبيقات الويب المتسلسل هذا باستخدام منحة اعتماد حامل OAuth 2.0 JWT، والمعروف باسم "تدفق نيابة عن". ومع ذلك، لا يتم حاليًا تطبيق "تدفق نيابة عن" في Azure AD B2C. على الرغم من أن On-Behalf-Of يعمل للتطبيقات المسجلة في معرف Microsoft Entra، فإنه لا يعمل للتطبيقات المسجلة في Azure AD B2C، بغض النظر عن المستأجر (معرف Microsoft Entra أو Azure AD B2C) الذي يصدر الرموز المميزة.

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

النطاقات

توفر النطاقات طريقة لإدارة الأذونات إلى الموارد المحمية. عند طلب رمز مميز للوصول، يحتاج تطبيق العميل إلى تحديد الأذونات المطلوبة في معلمة scope الخاصة بالطلب. على سبيل المثال، لتحديد قيمة النطاق لواجهة readبرمجة التطبيقات التي تحتوي على URI معرف التطبيق الخاص بـ https://contoso.onmicrosoft.com/api، سيكون النطاق https://contoso.onmicrosoft.com/api/read.

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

يظهر المثال التالي نطاقات تم فك ترميزها في عنوان موقع ويب:

scope=https://contoso.onmicrosoft.com/api/read openid offline_access

يظهر المثال التالي نطاقات تم فك ترميزها في عنوان موقع ويب:

scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2Fread%20openid%20offline_access

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

نطاقات الاتصال OpenID

يحدد معيار الاتصال openID عدة قيم نطاق خاصة. تمثل النطاقات التالية الإذن للوصول إلى ملف تعريف المستخدم:

  • openid - طلبات الرمز المميز للمعرّف.
  • offline_access - يطلب رمز مميز حديث باستخدام تدفقات رمز Auth.
  • 00000000-0000-0000-0000-000000000000 - يشير استخدام معرف العميل كنطاق إلى أن تطبيقك يحتاج إلى رمز مميز للوصول يمكن استخدامه مقابل خدمتك الخاصة أو واجهة برمجة تطبيقات الويب، ممثلة بنفس معرّف العميل.

إذا تضمنت المعلمة response_type في /authorize طلب يشمل token، يجب أن تتضمن معلمة النطاق نطاق مورد واحد على الأقل غير openid وoffline_access الذي سيتم منحهما. وإلا، يفشل الطلب /authorize.

طلب رمز مميز

لطلب رمز مميز للوصول، تحتاج إلى رمز تخويل. فيما يلي مثال على طلب إلى /authorize نقطة النهاية لرمز التخويل:

GET https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize?
client_id=<application-ID>
&nonce=anyRandomValue
&redirect_uri=https://jwt.ms
&scope=<application-ID-URI>/<scope-name>
&response_type=code

استبدل القيم الموجودة في سلسلة الاستعلام كما يلي:

  • <tenant-name> - اسم مستأجرMicrosoft Azure Active Directory B2C. إذا كنت تستخدم مجالاً مخصصاً، tenant-name.b2clogin.com فاستبدله بمجالك، مثل contoso.com.
  • <policy-name> - اسم نهجك المخصص أو تدفق المستخدم.
  • <application-ID> - معرف التطبيق من تطبيق الويب الذي قمت بتسجيله لدعم تدفق المستخدم.
  • <application-ID-URI> - معرف التطبيق URI الذي قمت بتعيينه ضمن كشف شفرة API في تطبيق العميل.
  • <scope-name> - اسم النطاق الذي قمت بإضافته ضمن كشف شفرة API في تطبيق العميل.
  • <redirect-uri> - إعادة توجيه URI الذي أدخلته عند تسجيل تطبيق العميل.

للتعرف على كيفية عمل الطلب، قم بلصق الطلب في المتصفح وتشغيله.

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

يجب أن تكون الاستجابة مع رمز التخويل مشابهة لهذا المثال:

https://jwt.ms/?code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...

بعد تلقي رمز التخويل بنجاح، يمكنك استخدامه لطلب رمز مميز للوصول. المعلمات موجودة في نص طلب HTTP POST:

POST <tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=<application-ID>
&scope=<application-ID-URI>/<scope-name>
&code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
&redirect_uri=https://jwt.ms
&client_secret=2hMG2-_:y12n10vwH...

إذا كنت ترغب في اختبار طلب POST HTTP هذا، يمكنك استخدام أي عميل HTTP مثل Microsoft PowerShell أو Postman.

استجابة الرمز المميز الناجحة تبدو كما يلي:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrN...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 3600,
    "expires_on": 1549651031,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11",
    "profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiJjNjRhNGY3ZC0zMDkxLTRjNzMtYTcyMi1hM2YwNjk0Z..."
}

عند استخدام https://jwt.ms لفحص رمز الوصول المميز الذي تم إرجاعه، يجب أن ترى شيئًا مشابهًا للمثال التالي:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dl..."
}.{
  "iss": "https://contoso0926tenant.b2clogin.com/c64a4f7d-3091-4c73-a7.../v2.0/",
  "exp": 1549651031,
  "nbf": 1549647431,
  "aud": "f2a76e08-93f2-4350-833c-965...",
  "oid": "1558f87f-452b-4757-bcd1-883...",
  "sub": "1558f87f-452b-4757-bcd1-883...",
  "name": "David",
  "tfp": "B2C_1_signupsignin1",
  "nonce": "anyRandomValue",
  "scp": "read",
  "azp": "38307aee-303c-4fff-8087-d8d2...",
  "ver": "1.0",
  "iat": 1549647431
}.[Signature]

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