قم بتفويض الوصول إلى تطبيقات الويب Microsoft Azure Active Directory باستخدام منح تدفق التعليمة البرمجية OAuth 2.0

تحذير

يخص هذا المحتوى نقطة النهاية الأقدم لإصدار Microsoft Azure Active Directory v1.0. استخدم النظام الأساسي للهويات في Microsoft للمشاريع الجديدة.

ملاحظة

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

يستخدمAzure Active Directory (Azure AD) OAuth 2. 0 لتمكينك من تفويض الوصول إلى تطبيقات الويب وواجهات برمجة تطبيقات الويب في مستأجر Azure AD. هذا الدليل مستقل عن اللغة، ويصف كيفية إرسال واستقبال رسائل HTTP دون استخدام أي من مكتباتنا مفتوحة المصدر.

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

سجل طلبك لدى مستأجر AD الخاص بك

أولاً، قم بتسجيل تطبيقك مع المستأجر دليل Azure النشط (Azure AD). هذا سوف يعطيك معرف التطبيق لتطبيقك، فضلًا عن تمكينه لتلقي الرموز المميزة.

  1. تسجيل الدخول إلى ⁧⁩مدخل Azure⁧⁩.

  2. اختر مستأجر Azure AD بتحديد حسابك في الزاوية العلوية اليمنى من الصفحة، متبوعًا بتحديد التنقل Switch Directory ثم تحديد المستأجر المناسب.

    • تخطي هذه الخطوة إذا كان لديك مستأجر Azure AD واحد فقط ضمن حسابك، أو إذا كنت قد حددت مستأجر Azure AD المناسب بالفعل.
  3. في بوابة Azure، اختر «Azure Active Directory» .

  4. في القائمة اليسرى في دليل Azure النشط، حدد App Registrations (تسجيلات التطبيقات)، ثم حدد New registration (تسجيل جديد).

  5. اتبع المطالبات وأنشئ تطبيقًا جديدًا. لا يهم ما إذا كان تطبيق ويب أو تطبيق عميل عام (الهاتف المحمول & كمبيوتر سطح المكتب) لهذا البرنامج التعليمي، ولكن إذا كنت ترغب في أمثلة محددة لتطبيقات الويب أو تطبيقات العميل العامة، فراجع &.

    • الاسم هو اسم التطبيق ويصف تطبيقك للمستخدمين النهائيين.
    • ضمن ⁧⁩أنواع الحسابات المدعومة⁧⁩، حدد ⁧⁩Accounts in any organizational directory and personal Microsoft accounts⁧⁩.
    • قم بتوفير عنوان URI لإعادة التوجيه. بالنسبة لتطبيقات الويب، هذا هو عنوان URL الأساسي لتطبيقك حيث يمكن للمستخدمين تسجيل الدخول. على سبيل المثال، ⁧http://localhost:12345⁩. بالنسبة للعميل العام (الهاتف المحمول & كمبيوتر سطح المكتب)، فإن Azure AD يستخدمه لإرجاع استجابات الرمز المميز. أدخل قيمة خاصة بتطبيقك. على سبيل المثال، ⁧http://MyFirstAADApp⁩.
  6. بمجرد الانتهاء من التسجيل، سيقوم Azure AD بتعيين معرف عميل فريد للتطبيق الخاص بك (معرف التطبيق). تحتاج هذه القيمة في الأقسام التالية، لذا قم بنسخها من صفحة التطبيق.

  7. للعثور على التطبيق الخاص بك في مدخل Microsoft Azure، حدد App registrations، ثم حددView all applications.

تدفق تخويل OAuth 2.0

على مستوى عالٍ، يبدو تدفق التخويل الكامل للتطبيق مشابهًا إلى حد ما:

OAuth Auth Code Flow

طلب رمز تفويض

يبدأ تدفق تعليمة برمجية للتخويل بتوجيه العميل للمستخدم إلى/authorize نقطة النهاية. في هذا الطلب، يشير العميل إلى أذونات الوصول التي يحتاجها للحصول عليها من المستخدم. يمكنك الحصول على نقطة نهاية التخويل OAuth 2.0 للمستأجر الخاص بك عن طريق تحديد App registrations Endpoints في مدخل Azure.

// Line breaks for legibility only

https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%3A12345
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345
المعلَمة النوع الوصف
المستأجر مطلوب يمكن استخدام القيمة {tenant} الموجودة في مسار الطلب للتحكم في من يمكنه تسجيل الدخول إلى التطبيق. القيم المسموح بها هي معرفات المستأجر، على سبيل المثال، 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 أو contoso.onmicrosoft.com أو common للرموز المميزة المستقلة للمستأجر
client_id مطلوب معرّف التطبيق الذي تم تعيينه لتطبيقك عندما قمت بتسجيله في Microsoft Azure AD. يمكنك العثور على هذا في مدخل Microsoft Azure. انقر فوقAzure Active Directoryفي الشريط الجانبي للخدمات، وانقر فوق App registrations، واختر التطبيق.
response_type مطلوب يجب أن يتضمنcode لتدفق تعليمة برمجية للتخويل.
redirect_uri موصى به redirect_uri تطبيقك، حيث يمكن لتطبيقك إرسال استجابات المصادقة واستلامها. يجب أن يتطابق تماماً مع إحدى عمليات redirect_uris التي قمت بتسجيلها في المدخل، باستثناء أنه يجب أن يكون مشفراً بعنوان URL. بالنسبة لتطبيقات الأجهزة المحمولة الأصلية & ينبغي لك استخدام القيمة الافتراضية الخاصة بـ https://login.microsoftonline.com/common/oauth2/nativeclient.
response_mode اختياري تحدد الطريقة التي يجب استخدامها لإرسال الرمز الناتج مرة أخرى إلى تطبيقك. يمكن أن يكون query، أو fragment، أو form_post. queryيوفر الرمز كمعامل سلسلة طلب بحث على عنوان URI لإعادة التوجيه. إذا كنت تطلب رمزًا مميزًا للمعرف باستخدام التدفق الضمني، فلا يمكنك استخدامه كما هو queryمحدد في مواصفاتquery إذا كنت تطلب تعليمة البرمجية فقط، فيمكنك queryاستخدامfragment، أوform_post. form_postينفذ منشور يحتوي على تعليمة برمجية إلى عنوان URI لإعادة التوجيه الخاص بك. الافتراضي هو queryلتدفق التعليمات البرمجية.
الولاية موصى به قيمة مضمنة في الطلب يتم إرجاعها أيضًا في استجابة الرمز المميز. عادة ما يتم استخدام قيمة فريدة تم إنشاؤها عشوائيّاً لمنع هجمات التزوير لطلب عبر الموقع. تُستخدم الحالة أيضًا لتشفير المعلومات حول حالة المستخدم في التطبيق قبل حدوث طلب المصادقة، مثل الصفحة أو العرض الذي كانوا فيه.
المورد موصى به معرف URI لواجهة برمجة تطبيقات الويب المستهدفة (مورد مُؤمن). للعثور على معرف URI لمعرف التطبيق، في مدخل Azure، انقر فوقAzure Active Directory، وانقر فوقApplication registrations، وافتح صفحة Settings التطبيق، ثم انقر فوق Properties. قد يكون أيضًا مصدر إعجاب خارجي https://graph.microsoft.com. هذا مطلوب في أحد طلبات المصادقة أو الرمز المميز. لضمان عدد أقل من مطالبات المصادقة، ضعه في طلب التفويض لضمان استلام الموافقة من المستخدم.
النطاق تم التجاهل بالنسبة إلى تطبيقات Azure AD v1، يجب تكوين النطاقات بشكل ثابت في مدخل Azure ضمن Settingsالتطبيق، Required Permissions.
مطلوب اختياري حدد نوع تفاعل المستخدم المطلوب.

القيم الصالحة هي:

login: يجب أن يُطلب من المستخدم إعادة المصادقة.

select_account: يُطلب من المستخدم تحديد حساب، مع مقاطعة تسجيل الدخول الفردي. يجوز للمستخدم تحديد حساب تم تسجيل دخوله حاليًّا، أو إدخال بيانات اعتماده لحساب محفوظ، أو اختيار استخدام حساب مختلف تمامًا.

consent: تم منح موافقة المستخدم، لكن يلزم تحديثها. ينبغي مطالبة المستخدم بالموافقة.

admin_consent: ينبغي مطالبة المسؤول بالموافقة نيابة عن جميع المستخدمين في مؤسسته

login_hint اختياري يمكن استخدامه لملء حقل اسم المستخدم / عنوان البريد الإلكتروني مسبقًا في صفحة تسجيل الدخول للمستخدم، إذا كنت تعرف اسم المستخدم الخاص به مسبقًا. غالبًا ما تستخدم التطبيقات هذه المعلمة أثناء إعادة المصادقة، بعد أن استخرجت بالفعل اسم المستخدم من تسجيل دخول سابق باستخدام preferred_usernameالمطالبة.
domain_hint اختياري يوفر تلميحًا حول المستأجر أو المجال الذي يجب على المستخدم استخدامه لتسجيل الدخول. قيمة domain_hint هي مجال مسجل للمستأجر. إذا تم توحيد المستأجر إلى دليل محلي، تعمل Microsoft Azure AD بإعادة التوجيه إلى خادم اتحاد المستأجر المحدد.
طريقة تحدي التعليمة البرمجية موصى به الأسلوب المستخدم لتشفيرcode_verifierللمعلمةcode_challenge. يمكن أن يكون واحدًا منplain أو S256. إذا تم استبعاده،code_challenge فمن المفترض أن يكون نصًا عاديًا إذاcode_challenge تم تضمينه. يدعم Azure AAD (دليل Azure النشط)v1.0 كلًا من plain و S256. لمزيد من المعلومات، راجع PKCE RFC.
code_challenge موصى به يُستخدم لتأمين منح رمز التفويض عبر مفتاح الإثبات لتبادل الشفرات (PKCE) من عميل أصلي أو عام. مطلوب إذا تم تضمين code_challenge_method. لمزيد من المعلومات، راجع PKCE RFC.

ملاحظة

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

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

الاستجابة الناجحة

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

GET  HTTP/1.1 302 Found
Location: http://localhost:12345/?code= AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA&session_state=7B29111D-C220-4263-99AB-6F6E135D75EF&state=D79E5777-702E-4260-9A62-37F75FF22CCE
المعلمة الوصف
admin_consent تكون القيمة صحيحة إذا وافق المسؤول على مطالبة طلب الموافقة.
تعليمة برمجية التعليمة البرمجية للتخويل الذي طلبه التطبيق. يمكن للتطبيق استخدام تعليمة برمجية التخويل لطلب رمز وصول للمورد الهدف.
session_state قيمة فريدة تحدد جلسة المستخدم الحالية. هذه القيمة هي معرّف فريد، ولكن يجب معاملتها كقيمة معتمة يتم تمريرها بدون فحص.
الولاية إذا تم تضمين معلمة حالة في الطلب، فينبغي أن تظهر نفس القيمة في الاستجابة. من الممارسات الجيدة أن يتحقق التطبيق من تطابق قيم الحالة في الطلب والاستجابة قبل استخدام الاستجابة. يساعد هذا في الكشف عن هجمات تزوير طلب المواقع المشتركة (CSRF) ضد العميل.

الاستجابة للخطأ

يمكن أيضًا إرسال استجابات الأخطاء إلىredirect_uri بحيث يمكن للتطبيق التعامل معها بشكل مناسب.

GET http://localhost:12345/?
error=access_denied
&error_description=the+user+canceled+the+authentication
المعلمة الوصف
خطأ قيمة رمز خطأ محددة في القسم 5.2 من إطار تخويل العمل OAuth 2.0. يصف الجدول التالي رموز الخطأ التي يقوم Microsoft Azure Active Directory بإرجاعها.
error_description وصف أكثر تفصيلًا للخطأ. لا يُقصد من هذه الرسالة أن تكون سهلة الاستخدام.
الولاية قيمة الحالة هي قيمة غير معاد استخدامها يتم إنشاؤها عشوائيًا ويتم إرسالها في الطلب وإعادتها في الاستجابة لمنع هجمات تزييف الطلبات عبر المواقع المشتركة (CSRF).

التعليمات البرمجية الخطأ الخاصة بأخطاء نقطة النهاية للتخويل

يصف الجدول التالي رموز الخطأ المختلفة التي يمكن إرجاعها في معلمة error الاستجابة للخطأ.

التعليمات البرمجية للأخطاء الوصف إجراء العميل
invalid_request خطأ البروتوكول، مثل معلمة أسطر غير منفذة مطلوبة. إصلاح الطلب وأعد إرساله. هذا خطأ في التطوير، وعادة ما يتم اكتشافه أثناء الاختبار الأولي.
unauthorized_client لا يُسمح لتطبيق العميل بطلب تعليمة برمجية التخويل. يحدث هذا عادةً عندما لا يكون تطبيق العميل مسجلاً فيAzure AD أو لم تتم إضافته إلى مستأجر Azure AD الخاص بالمستخدم. يمكن للتطبيق مطالبة المستخدم بتعليمات تثبيت التطبيق وإضافته إلى Azure AD.
access_denied رفض مالك المورد الموافقة يمكن لتطبيق العميل إخطار المستخدم بأنه لا يمكنه المتابعة ما لم يوافق المستخدم.
unsupported_response_type خادم التخويل لا يدعم نوع الاستجابة في الطلب. إصلاح الطلب وأعد إرساله. هذا خطأ في التطوير، وعادة ما يتم اكتشافه أثناء الاختبار الأولي.
server_error واجه الخادم خطأ غير متوقع. إعادة محاولة الطلب. يمكن أن تنتج هذه الأخطاء عن ظروف مؤقتة. قد يشرح تطبيق العميل للمستخدم أن استجابته قد تأخرت بسبب خطأ مؤقت.
temporarily_unavailable الخادم مشغول جدًا مؤقتًا لا يمكنه معالجة الطلب. إعادة محاولة الطلب. قد يشرح تطبيق العميل للمستخدم أن استجابته قد تأخرت بسبب حالة مؤقتة.
invalid_resource المورد الهدف غير صالح لأنه غير موجود أو لا يمكن لـ Azure AD العثور عليه، أو لم يتم تكوينه بشكل صحيح. يشير هذا إلى أنه لم يتم تكوين المورد، إذا كان موجودًا، في المستأجر. يمكن للتطبيق مطالبة المستخدم بتعليمات تثبيت التطبيق وإضافته إلى Azure AD.

استخدام التعليمة البرمجية للتخويل لطلب رمز مميز للوصول

الآن بعد أن حصلت على التعليمة البرمجية للتخويل وتم منحه إذنًا من قبل المستخدم، يمكنك استرداد د الرمز المميز للوصول إلى المورد المرغوب فيه، عن طريق إرسال طلب نشر إلى نقطة النهاية /token:

// Line breaks for legibility only

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA
&redirect_uri=https%3A%2F%2Flocalhost%3A12345
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=p@ssw0rd

//NOTE: client_secret only required for web apps
المعلَمة النوع الوصف
المستأجر مطلوب يمكن استخدام القيمة {tenant} الموجودة في مسار الطلب للتحكم في من يمكنه تسجيل الدخول إلى التطبيق. القيم المسموح بها هي معرفات المستأجر، على سبيل المثال، 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 أو contoso.onmicrosoft.com أو common للرموز المميزة المستقلة للمستأجر
client_id مطلوب معرف التطبيق المعين لتطبيقك عندما قمت بتسجيله باستخدام Azure AD. يمكنك العثور على هذا في مدخل Azure. يتم عرض معرف التطبيق في إعدادات تسجيل التطبيق.
grant_type مطلوب يجب أن authorization_codeيتضمن التدفق التعليمة البرمجية للتخويل.
تعليمة برمجية مطلوب ما حصلت عليه في القسم السابق authorization_code
redirect_uri مطلوب redirect_uriمسجل في تطبيق العميل.
client_secret مطلوب لتطبيقات الويب، وغير مسموح به للعملاء العموميين سر التطبيق الذي أنشأته في مدخل Azure لتطبيقك ضمن Keys. لا يمكن استخدامه في تطبيق أصلي (عميل عام)، لأنه لا يمكن تخزين أسرار العميل بشكل موثوق على الأجهزة. إنه مطلوب لتطبيقات الويب وواجهات برمجة تطبيقات الويب (جميع العملاء السريين)، والتي لديها القدرة على التخزين client_secretالآمن على جانب الخادم. يجب أن تكون client_secret مشفرةً بعنوان URL قبل إرسالها.
المورد موصى به معرف URI لواجهة برمجة تطبيقات الويب المستهدفة (مورد مُؤمن). للعثور على معرف URI لمعرف التطبيق، في مدخل Azure، انقر فوقAzure Active Directory، وانقر فوقApplication registrations، وافتح صفحة Settings التطبيق، ثم انقر فوق Properties. قد يكون أيضًا مصدر إعجاب خارجي https://graph.microsoft.com. هذا مطلوب في أحد طلبات المصادقة أو الرمز المميز. لضمان عدد أقل من مطالبات المصادقة، ضعه في طلب التفويض لضمان استلام الموافقة من المستخدم. إذا كان في كل من طلب التفويض وطلب الرمز المميز، يجب أن تتطابق معلمات المورد.
كود_المحقق اختياري نفس code_verifier التي تم استخدامها للحصول على authorization_code. مطلوب إذا تم استخدام PKCE في طلب منح التعليمة البرمجية للتخويل. لمزيد من المعلومات، راجع PKCE RFC

للعثور على معرف URI لمعرف التطبيق، في مدخل Azure، انقر فوقAzure Active Directory، وانقر فوقApplication registrations، وافتح صفحة Settings التطبيق، ثم انقر فوق Properties.

الاستجابة الناجحة

يقومMicrosoft Azure Active Directory بإرجاع رمز وصول عند الاستجابة الناجحة. لتصغير مكالمات الشبكة من تطبيق العميل ووقت الاستجابة المرتبط بها، ينبغي أن يخزن تطبيق العميل رموز الوصول مؤقتًا لعمر الرمز المميز المحدد في استجابة OAuth 2.0. لتحديد عمر الرمز المميز، استخدم إما قيم المعلمة expires_inأوexpires_on.

إذا قام مورد واجهة برمجة تطبيقات الويب بإرجاع invalid_tokenرمز خطأ، فقد يشير ذلك إلى أن المورد قد حدد انتهاء صلاحية الرمز المميز. إذا كانت أوقات ساعة العميل والمورد مختلفة (المعروفة باسم "انحراف الوقت")، فقد يعتبر المورد أن الرمز المميز منتهي الصلاحية قبل مسح الرمز المميز من ذاكرة التخزين المؤقت للعميل. في حالة حدوث ذلك، امسح الرمز المميز من ذاكرة التخزين المؤقت، حتى إذا كان لا يزال ضمن عمره المحسوب.

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

{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
  "token_type": "Bearer",
  "expires_in": "3600",
  "expires_on": "1388444763",
  "resource": "https://service.contoso.com/",
  "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA",
  "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
  "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83ZmU4MTQ0Ny1kYTU3LTQzODUtYmVjYi02ZGU1N2YyMTQ3N2UvIiwiaWF0IjoxMzg4NDQwODYzLCJuYmYiOjEzODg0NDA4NjMsImV4cCI6MTM4ODQ0NDc2MywidmVyIjoiMS4wIiwidGlkIjoiN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlIiwib2lkIjoiNjgzODlhZTItNjJmYS00YjE4LTkxZmUtNTNkZDEwOWQ3NGY1IiwidXBuIjoiZnJhbmttQGNvbnRvc28uY29tIiwidW5pcXVlX25hbWUiOiJmcmFua21AY29udG9zby5jb20iLCJzdWIiOiJKV3ZZZENXUGhobHBTMVpzZjd5WVV4U2hVd3RVbTV5elBtd18talgzZkhZIiwiZmFtaWx5X25hbWUiOiJNaWxsZXIiLCJnaXZlbl9uYW1lIjoiRnJhbmsifQ."
}

المعلمة الوصف
access_token رمز الوصول المميز المطلوب. هذه سلسلة مبهمة - يعتمد على ما يتوقع المورد تلقيه، وليس المقصود للعميل أن ينظر إليه. يمكن للتطبيق استخدام هذا الرمز المميز للمصادقة على المورد الآمن، مثل واجهة برمجة تطبيقات الويب.
token_type يشير إلى قيمة نوع الرمز المميز. النوع الوحيد الذي يدعمه Azure AD هو الرمز المميز للمالك. لمزيد من المعلومات حول الرموز المميزة لحاملها، راجع إطار تخويل OAuth2.0: استخدام رمز المالك (RFC 6750)
expires_in مدة صلاحية رمز الوصول المميز (بالثواني).
expires_on الوقت الذي تنتهي فيه صلاحية الرمز المميز للوصول المميز. يتم تمثيل التاريخ بعدد الثواني من 1970-01-01T0: 0: 0Z UTC حتى وقت انتهاء الصلاحية. يتم استخدام هذه القيمة لتحديد عمر الرموز المميزة المخزنة مؤقتا.
المورد معرف التطبيق معرف URI لواجهة برمجة تطبيقات الويب (مورد مؤمن).
النطاق تم منح أذونات وصول الشخصية لتطبيق العميل. الإذن الافتراضي هوuser_impersonation. يمكن لمالك المورد المضمون تسجيل قيم إضافية في Azure AD.
refresh_token رمز تحديث OAuth 2.0 المميز. يمكن للتطبيق استخدام هذا الرمز المميز للحصول على رموز وصول إضافية بعد انتهاء صلاحية رمز الوصول المميز الحالي. تعد رموز التحديث طويلة الأجل، ويمكن استخدامها للاحتفاظ بالوصول إلى الموارد لفترات طويلة من الوقت.
id_token رمز ويب JSON غير موقعة (JWT) يمثل رمزًا مميزًا للمعرف. يمكن للتطبيق base64Url فك تشفير شرائح هذا الرمز المميز لطلب معلومات حول المستخدم الذي قام بتسجيل الدخول. يمكن للتطبيق تخزين القيم مؤقتًا وعرضها، ولكن لا ينبغي أن يعتمد عليها في أي إذن أو حدود أمنية.

لمزيد من المعلومات حول رموز الويب JSON، راجع مسودة مواصفات JWT IETF. لمعرفة المزيد حولid_tokens، راجعid_tokens.

الاستجابة للخطأ

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

يمكن أن تبدو استجابة الخطأ النموذجية كما يلي:

{
  "error": "invalid_grant",
  "error_description": "AADSTS70002: Error validating credentials. AADSTS70008: The provided authorization code or refresh token is expired. Send a new interactive authorization request for this user and resource.\r\nTrace ID: 3939d04c-d7ba-42bf-9cb7-1e5854cdce9e\r\nCorrelation ID: a8125194-2dc8-4078-90ba-7b6592a7f231\r\nTimestamp: 2016-04-11 18:00:12Z",
  "error_codes": [
    70002,
    70008
  ],
  "timestamp": "2016-04-11 18:00:12Z",
  "trace_id": "3939d04c-d7ba-42bf-9cb7-1e5854cdce9e",
  "correlation_id": "a8125194-2dc8-4078-90ba-7b6592a7f231"
}
المعلمة الوصف
خطأ سلسلة رمز خطأ يمكن استخدامها لتصنيف أنواع الأخطاء التي تحدث، ويمكن استخدامها للرد على الأخطاء.
error_description رسالة خطأ محددة يمكن أن تساعد المطور في تحديد السبب الجذري لخطأ المصادقة.
error_codes قائمة بالتعليمات البرمجية الخطأ الخاصة بـ STS والتي يمكن أن تساعد في التشخيص.
طابع زمني وقت حدوث الخطأ.
trace_id معرّف فريد للطلب يمكن أن يساعد في التشخيص.
correlation_id معرّف فريد للطلب يمكن أن يساعد في التشخيص عبر المكونات.

تعليمة برمجية حالة HTTP

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

التعليمة البرمجية HTTP الوصف
400 التعليمة البرمجية HTTP الافتراضية. تُستخدم في معظم الحالات وعادةً ما تكون بسبب طلب غير صحيح. إصلاح الطلب وأعد إرساله.
401 فشلت المصادقة. على سبيل المثال، أسطر غير منفذة الطلب إلى معلمة client_secret.
403 فشل التخويل. على سبيل المثال، ليس لدى المستخدم إذن للوصول إلى المورد.
500 حدث خطأ داخلي في الخدمة. إعادة محاولة الطلب.

التعليمات البرمجية للخطأ لأخطاء نقطة نهاية الرمز المميز

التعليمات البرمجية للأخطاء الوصف إجراء العميل
invalid_request خطأ البروتوكول، مثل معلمة أسطر غير منفذة مطلوبة. إصلاح الطلب وإعادة إرساله
invalid_grant تعليمة برمجية التخويل غير صالح أو انتهت صلاحيته. جرب طلبًا جديدًا لنقطة النهاية /authorize
unauthorized_client العميل المصادق عليه غير مخول له باستخدام نوع منح التخويل هذا. يحدث هذا عادةً عندما لا يكون تطبيق العميل مسجلاً في Azure AD أو لم تتم إضافته إلى مستأجر Azure AD الخاص بالمستخدم. يمكن للتطبيق مطالبة المستخدم بتعليمات تثبيت التطبيق وإضافته إلى Azure AD.
invalid_client فشل مصادقة العميل. بيانات اعتماد العميل غير صالحة. لإصلاح ذلك، يقوم مسؤول التطبيق بتحديث بيانات الاعتماد.
unsupported_grant_type لا يدعم خادم التخويل نوع منح التخويل. قم بتغيير نوع المنحة في الطلب. يجب أن يحدث هذا النوع من الخطأ فقط أثناء التطوير ويتم اكتشافه أثناء الاختبار الأولي.
invalid_resource المورد الهدف غير صالح لأنه غير موجود أو لا يمكن لـ Azure AD العثور عليه، أو لم يتم تكوينه بشكل صحيح. يشير هذا إلى أنه لم يتم تكوين المورد، إذا كان موجودًا، في المستأجر. يمكن للتطبيق مطالبة المستخدم بتعليمات تثبيت التطبيق وإضافته إلى Azure AD.
interaction_required الطلب يتطلب تفاعل المستخدم. على سبيل المثال، مطلوب خطوة مصادقة إضافية. بدلاً من الطلب غير التفاعلي، أعد المحاولة باستخدام طلب تخويل تفاعلي للمورد نفسه.
temporarily_unavailable الخادم مشغول جدًا مؤقتًا لا يمكنه معالجة الطلب. إعادة محاولة الطلب. قد يشرح تطبيق العميل للمستخدم أن استجابته قد تأخرت بسبب حالة مؤقتة.

استخدم رمز الوصول المميز للوصول إلى المورد

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

طلب عينة

GET /data HTTP/1.1
Host: service.contoso.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ

الاستجابة للخطأ

تصدر الموارد المؤمنة التي تنفذ RFC 6750 التعليمات البرمجية للحالة HTTP. إذا لم يتضمن الطلب بيانات اعتماد المصادقة أو كان يفتقد إلى الرمز المميز، فستتضمن الاستجابةWWW-Authenticate عنوانًا. عندما يفشل الطلب، يستجيب خادم المورد برمز حالة HTTP ورمز خطأ.

فيما يلي مثال على استجابة غير ناجحة عندما لا يتضمن طلب العميل الرمز المميز للمالك:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer authorization_uri="https://login.microsoftonline.com/contoso.com/oauth2/authorize",  error="invalid_token",  error_description="The access token is missing.",

معلمات الخطأ

المعلمة الوصف
تخويل_uri URI (نقطة النهاية الفعلية) لخادم التخويل. تُستخدم هذه القيمة أيضًا كمفتاح بحث للحصول على مزيد من المعلومات حول الخادم من نقطة نهاية الاكتشاف.

يجب على العميل التحقق من أن خادم التخويل موثوق به. عندما يكون المورد محميًا بواسطة Azure AD، يكفي التحقق من أن عنوان URL يبدأ https://login.microsoftonline.com أو باسم مضيف آخر يدعمه Azure AD. يجب أن يقوم المورد الخاص بالمستأجر دائمًا بإرجاع URI للترخيص الخاص بالمستأجر.

خطأ قيمة رمز خطأ محددة في القسم 5.2 من إطار تخويل العمل OAuth 2.0.
error_description وصف أكثر تفصيلًا للخطأ. لا يُقصد من هذه الرسالة أن تكون سهلة الاستخدام.
resource_id إرجاع المعرّف الفريد للمورد. يمكن لتطبيق العميل استخدام هذا المعرف كقيمة للمعلمة resourceعندما يطلب رمزًا مميزًا للمورد.

من المهم أن يتحقق تطبيق العميل من هذه القيمة، وإلا فقد تكون الخدمة الضارة قادرة على إحداث هجوم elevation-of-privileges

تتمثل الإستراتيجية الموصى بها لمنع الهجوم في التحقق منresource_id تطابق قاعدة عنوان URL لواجهة برمجة تطبيقات الويب التي يتم الوصول إليها. على سبيل المثال، إذاhttps://service.contoso.com/data تم الوصول إليه،resource_id يمكن أن يكونhttps://service.contoso.com/. يجب أن يرفض تطبيق العميلresource_id عنوانًا لا يبدأ بعنوان URL الأساسي ما لم تكن هناك طريقة بديلة موثوقة للتحقق من المعرف.

رموز خطأ مخطط الحامل

تحدد مواصفات RFC 6750 الأخطاء التالية للموارد التي تستخدم نظام رأس وحامل WWW في الاستجابة.

التعليمة البرمجية لحالة HTTP التعليمات البرمجية للأخطاء الوصف إجراء العميل
400 invalid_request الطلب غير منسق بشكل جيد. على سبيل المثال، قد يفتقد إلى معلمة أو يستخدم نفس المعلمة مرتين. إصلاح الخطأ وإعادة محاولة الطلب. يجب أن يحدث هذا النوع من الخطأ فقط أثناء التطوير ويتم اكتشافه في الاختبار الأولي.
401 invalid_token الرمز المميز للوصول مفقود أو غير صالح أو تم إبطاله. توفر قيمة معلمة error_description تفاصيل إضافية. اطلب رمزًا جديدًا من خادم التخويل. إذا فشل الرمز المميز الجديد، فقد حدث خطأ غير متوقع. أرسل رسالة خطأ إلى المستخدم وأعد المحاولة بعد تأخيرات عشوائية.
403 insufficient_scope لا يحتوي الرمز المميز للوصول على أذونات الوصول المطلوبة للوصول إلى المورد. أرسل طلب تخويل جديد إلى نقطة نهاية التخويل. إذا كانت الاستجابة تحتوي على معلمة النطاق، فاستخدم قيمة النطاق في الطلب إلى المورد.
403 insufficient_access لا يمتلك الموضوع رمز مميّز للأذونات المطلوبة للوصول إلى المورد. مطالبة المستخدم باستخدام حساب مختلف أو لطلب أذونات الوصول للمورد المحدد.

تحديث الرموز المميزة للوصول

رموز الوصول المميزة قصيرة العمر ويجب تحديثها بعد انتهاء صلاحيتها لمواصلة الوصول إلى الموارد. يمكنك تحديث access_tokenعن طريق إرسال طلب آخرPOST إلى نقطة نهاية/token، ولكن هذه المرة توفر refresh_tokenبدلاً منcode. تعد رموز التحديث صالحة لجميع الموارد التي تم منح العميل الخاص بك بالفعل الموافقة على الوصول إليها - وبالتالي،resource=https://graph.microsoft.com يمكن استخدام رمز تحديث تم إصداره بناءً على طلب لطلب رمز مميز للوصول جديدresource=https://contoso.com/api.

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

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

نموذج طلب لنقطة النهاية الخاصة بالمستأجر (يمكنك أيضًا استخدام نقطة النهاية المشتركة) للحصول على رمز مميز للوصول جديد باستخدام رمز تحديث مشابهة للتالي:

// Line breaks for legibility only

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=JqQX2PNo9bpM0uEihUPzyrh    // NOTE: Only required for web apps

الاستجابة الناجحة

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

{
  "token_type": "Bearer",
  "expires_in": "3600",
  "expires_on": "1460404526",
  "resource": "https://service.contoso.com/",
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
  "refresh_token": "AwABAAAAv YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl PM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfmVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA"
}
المعلمة الوصف
token_type نوع الرمز المميز. القيمة الوحيدة المدعومة هي الرمز المميز للمالك.
expires_in مدة بقاء الرمز المميز بالثواني. القيمة النموذجية هي 3600 (ساعة واحدة).
expires_on التاريخ والوقت الذي تنتهي فيه صلاحية الرمز المميز. يتم تمثيل التاريخ بعدد الثواني من 1970-01-01T0: 0: 0Z UTC حتى وقت انتهاء الصلاحية.
المورد يحدد المورد المضمون الذي يمكن استخدام رمز الوصول للوصول إليه.
النطاق تم منح أذونات انتحال الشخصية لتطبيق العميل الأصلي. الإذن الافتراضي هو user_impersonation. يمكن لمالك المورد الهدف تسجيل قيم بديلة في Azure AD.
access_token رمز الوصول الجديد الذي تم طلبه.
refresh_token تحديث OAuth 2.0 جديد يمكن استخدامه لطلب رموز وصول جديدة عند انتهاء صلاحية الرمز الموجود في هذه الاستجابة.

الاستجابة للخطأ

يمكن أن تبدو استجابة الخطأ النموذجية كما يلي:

{
  "error": "invalid_resource",
  "error_description": "AADSTS50001: The application named https://foo.microsoft.com/mail.read was not found in the tenant named 295e01fc-0c56-4ac3-ac57-5d0ed568f872. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.\r\nTrace ID: ef1f89f6-a14f-49de-9868-61bd4072f0a9\r\nCorrelation ID: b6908274-2c58-4e91-aea9-1f6b9c99347c\r\nTimestamp: 2016-04-11 18:59:01Z",
  "error_codes": [
    50001
  ],
  "timestamp": "2016-04-11 18:59:01Z",
  "trace_id": "ef1f89f6-a14f-49de-9868-61bd4072f0a9",
  "correlation_id": "b6908274-2c58-4e91-aea9-1f6b9c99347c"
}
المعلمة الوصف
خطأ سلسلة رمز خطأ يمكن استخدامها لتصنيف أنواع الأخطاء التي تحدث، ويمكن استخدامها للرد على الأخطاء.
error_description رسالة خطأ محددة يمكن أن تساعد المطور في تحديد السبب الجذري لخطأ المصادقة.
error_codes قائمة بالتعليمات البرمجية الخطأ الخاصة بـ STS والتي يمكن أن تساعد في التشخيص.
طابع زمني وقت حدوث الخطأ.
trace_id معرّف فريد للطلب يمكن أن يساعد في التشخيص.
correlation_id معرّف فريد للطلب يمكن أن يساعد في التشخيص عبر المكونات.

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

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

لمعرفة المزيد حول نقطة نهاية Azure AD v1.0 وكيفية إضافة المصادقة والتخويل إلى تطبيقات الويب وواجهات برمجة تطبيقات الويب، راجع نماذج التطبيقات.