بروتوكول SAML للدخول الأحادي
تتناول هذه المقالة طلبات واستجابات مصادقة SAML 2.0 التي يدعمها Microsoft Azure Active Directory (Azure AD) لتسجيل الدخول الأحادي (SSO).
يصف مخطط البروتوكول أدناه تسلسل الدخول الأحادي. تستخدم الخدمة السحابية (موفر الخدمة) ربط HTTP Redirect لتمرير عنصر AuthnRequest (طلب المصادقة) إلى Microsoft Azure Active Directory (موفر الهوية). يستخدم Microsoft Azure Active Directory بعد ذلك ارتباط نشر HTTP لنشر عنصر Response إلى الخدمة السحابية.

ملاحظة
تناقش هذه المقالة استخدام SAML لتسجيل الدخول الأحادي. للحصول على مزيدٍ من المعلومات حول الطرق الأخرى للتعامل مع تسجيل الدخول الأحادي (على سبيل المثال، باستخدام OpenID Connect أو مصادقة Windows المتكاملة)، راجع تسجيل الدخول الأحادي إلى التطبيقات فيMicrosoft Azure Active Directory .
طلب المصادقة
لطلب مصادقة مستخدم، ترسل الخدمات السحابية AuthnRequest عنصرا إلى Microsoft Azure Active Directory. قد يبدو نموذج SAML 2.0 AuthnRequest مشابهاً للمثال التالي:
<samlp:AuthnRequest
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
ID="id6c1c178c166d486687be4aaf5e482730"
Version="2.0" IssueInstant="2013-03-18T03:28:54.1839884Z"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
</samlp:AuthnRequest>
| المعلَمة | النوع | الوصف |
|---|---|---|
| المعرف | مطلوب | يستخدم Microsoft Azure Active Directory هذه السمة لملء InResponseTo سمة الاستجابة التي تم إرجاعها. يجب ألا يبدأ المعرّف برقم، لذا تتمثل الإستراتيجية الشائعة في إرفاق سلسلة مثل "معرّف" بتمثيل سلسلة GUID مسبقاً. على سبيل المثال، يعد id6c1c178c166d486687be4aaf5e482730 معرفاً صالحاً. |
| إصدار | مطلوب | يجب تعيين هذه المعلمة إلى 2.0. |
| IssueInstant | مطلوب | هذه سلسلة DateTime بقيمة UTC وتنسيق ذهاب وإياب ("o") . يتوقع Microsoft Azure Active Directory قيمة DateTime من هذا النوع، ولكنه لا يقيم القيمة أو يستخدمها. |
| عنوان URL لخدمة المستهلك Assertion | اختياري | إذا تم توفير هذه المعلمة، يجب أن تتطابق مع RedirectUri الخدمة السحابية في Microsoft Azure Active Directory. |
| ForceAuthn | اختياري | هذه القيمة المنطقية. إذا كان صحيحا، فهذا يعني أن المستخدم سوف يضطر إلى إعادة المصادقة، حتى إذا كان لديهم جلسة عمل صالحة مع Microsoft Azure Active Directory. |
| IsPassive | اختياري | هذه قيمة منطقية تحدد ما إذا كان يجب على Microsoft Azure Active Directory مصادقة المستخدم بصمت، دون تدخل المستخدم، باستخدام ملف تعريف ارتباط الجلسة إن وجد. إذا كان هذا صحيحًا، فسيحاول Microsoft Azure Active Directory مصادقة المستخدم باستخدام ملف تعريف ارتباط الجلسة. |
تم AuthnRequest تجاهل جميع سمات الأخرى، مثل Consent و Destination و AssertionConsumerServiceIndex و AttributeConsumerServiceIndex و ProviderName.
يتجاهل Microsoft Azure Active Directory أيضا Conditions العنصر فيAuthnRequest.
مُصدر الشهادة
يجب أن يتطابق العنصر Issuer في AuthnRequest تماماً مع أحد ServicePrincipalNames في الخدمة السحابية في Microsoft Azure Active Directory. عادةً ما يتم تعيين هذا على App ID URI الذي يتم تحديده أثناء تسجيل التطبيق.
يبدو مقتطف SAML الذي يحتوي على عنصر Issuer مشابهاً للعينة التالية:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
نهج معرف الاسم
يطلب هذا العنصر تنسيق معرف اسم معين في الاستجابة وهو اختياري في عناصر AuthnRequest المرسلة إلى Microsoft Azure Active Directory.
عنصر NameIdPolicy يشبه النموذج التالي:
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
إذا تم توفير،NameIDPolicy فيمكنك تضمين سمة Format الاختيارية الخاصة به. يمكن أن تحتوي السمة Format على قيمة واحدة فقط من القيم التالية؛ أي قيمة أخرى ينتج عنها خطأ.
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: يصدر Microsoft Azure Active Directory مطالبة NameID كمعرف مزدوج.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: يصدر Microsoft Azure Active Directory مطالبة NameID بنموذج عنوان البريد الإلكتروني.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: تسمح هذه القيمة لـ Microsoft Azure Active Directory بتحديد نموذج المطالبة. يصدرMicrosoft Azure Active Directory معرف الاسم كمعرف مزدوج.urn:oasis:names:tc:SAML:2.0:nameid-format:transient: يصدر Microsoft Azure Active Directory NameID كقيمة تم إنشاؤها عشوائياً وتكون فريدة لعملية SSO الحالية. هذا يعني أن القيمة مؤقتة ولا يمكن استخدامها لتحديد مستخدم المصادقة.
إذا SPNameQualifier تم تحديد ذلك، سيتضمن Microsoft Azure Active Directory نفس الشيء SPNameQualifier في الاستجابة.
يتجاهل Microsoft Azure Active Directory AllowCreate السمة.
RequestedAuthnContext
RequestedAuthnContextيحدد العنصر طرق المصادقة المطلوبة. إنه اختياري في عناصر AuthnRequest المرسلة إلى Microsoft Azure Active Directory. يدعم Microsoft Azure Active DirectoryAuthnContextClassRef قيما مثلurn:oasis:names:tc:SAML:2.0:ac:classes:Password.
تحديد النطاق
يعتبر عنصر، Scopingالذي يتضمن قائمة بموفري الهوية، اختيارياً في عناصر AuthnRequest المرسلة إلى Microsoft Azure Active Directory.
إذا تمت توفيرها، لا تقم بتضمين ProxyCount السمة IDPListOption أو RequesterID العنصر، حيث أنها غير مدعومة.
التوقيع
عنصر Signature في عناصر AuthnRequest يكون اختياري. لا يتحقق Microsoft Azure Active Directory من صحة طلبات المصادقة الموقعة في حالة وجود توقيع. يتم توفير التحقق من الطالب من خلال الاستجابة فقط لعناوين ويب URL لخدمة مستهلك Assertion المسجلة.
الموضوع
لا تتضمن Subject عنصراً. لا يدعم Microsoft Azure Active Directory تحديد موضوع لطلب ما، وسيرجع خطأ إذا تم توفير أحدها.
الاستجابة
عند اكتمال تسجيل الدخول المطلوب بنجاح، ينشر Microsoft Azure Active Directory استجابة لخدمة السحابة. تبدو الاستجابة لمحاولة تسجيل دخول ناجحة مثل النموذج التالي:
<samlp:Response ID="_a4958bfd-e107-4e67-b06d-0d85ade2e76a" Version="2.0" IssueInstant="2013-03-18T07:38:15.144Z" Destination="https://contoso.com/identity/inboundsso.aspx" InResponseTo="id758d0ef385634593a77bdf7e632984b6" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<Assertion ID="_bf9c623d-cc20-407a-9a59-c2d0aee84d12" IssueInstant="2013-03-18T07:38:15.144Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>https://login.microsoftonline.com/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
<Subject>
<NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>testuser@contoso.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
<AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
</Attribute>
...
</AttributeStatement>
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
<AuthnContext>
<AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
</Assertion>
</samlp:Response>
الاستجابة
يتضمن العنصر Response نتيجة طلب التفويض. يقوم Microsoft Azure Active Directory بتعيين ID القيم Version و في IssueInstantResponse العنصر. يقوم أيضاً بتعيين السمات التالية:
Destination: عند اكتمال تسجيل الدخول بنجاح، يتم تعيين هذا علىRedirectUriمقدم الخدمة (خدمة السحاب).InResponseTo: يتم تعيين هذا على السمةIDللعنصرAuthnRequestالذي بدأ الاستجابة.
مُصدر الشهادة
يعيّن Microsoft Azure Active Directory عنصرIssuerلـhttps://sts.windows.net/<TenantIDGUID>/ حيث<TenantIDGUID>هو معرف المستأجر لمستأجر Microsoft Azure Active Directory.
على سبيل المثال، يمكن أن تبدو الاستجابة باستخدام عنصر المُصدر كما يلي:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
الحالة
يوضح العنصر Status نجاح أو فشل تسجيل الدخول. يتضمن عنصر StatusCode، الذي يحتوي على رمز أو مجموعة من الرموز المتداخلة التي تمثل حالة الطلب. يتضمن أيضًا عنصر StatusMessage، الذي يحتوي على رسائل خطأ مخصصة تم إنشاؤها أثناء عملية تسجيل الدخول.
العينة التالية عبارة عن استجابة SAML لمحاولة تسجيل دخول غير ناجحة.
<samlp:Response ID="_f0961a83-d071-4be5-a18c-9ae7b22987a4" Version="2.0" IssueInstant="2013-03-18T08:49:24.405Z" InResponseTo="iddce91f96e56747b5ace6d2e2aa9d4f8c" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" />
</samlp:StatusCode>
<samlp:StatusMessage>AADSTS75006: An error occurred while processing a SAML2 Authentication request. AADSTS90011: The SAML authentication request property 'NameIdentifierPolicy/SPNameQualifier' is not supported.
Trace ID: 66febed4-e737-49ff-ac23-464ba090d57c
Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
</samlp:Status>
</samlp:Response>
تأكيد
بالإضافة إلىID،IssueInstantوVersionيعينMicrosoft Azure Active Directory العناصر التالية في عنصرAssertion للاستجابة.
مُصدر الشهادة
تم تعيين هذا لـhttps://sts.windows.net/<TenantIDGUID>/ حيث<TenantIDGUID>هو معرف المستأجر لمستأجر Microsoft Azure Active Directory.
<Issuer>https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
التوقيع
يوقع Microsoft Azure Active Directory التأكيد استجابة لتسجيل الدخول الناجح. يحتوي العنصر Signature على توقيع رقمي يمكن للخدمة السحابية استخدامه لمصادقة المصدر للتحقق من تكامل التأكيد.
لإنشاء هذا التوقيع الرقمي، يستخدم Microsoft Azure Active Directory مفتاح التوقيع في عنصر IDPSSODescriptor من مستند البيانات التعريفية الخاص به.
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
digital_signature_here
</ds:Signature>
الموضوع
هذا يحدد المبدأ الذي هو موضوع البيانات في التأكيد. يحتوي على العنصرNameID، والذي يمثل المستخدم المصادق عليه. القيمة NameID عبارة عن معرف مستهدف يتم توجيهه فقط إلى مزود الخدمة الذي يمثل جمهور الرمز المميز. إنه ثابت - يمكن إلغاؤه، لكن لا يتم إعادة تعيينه أبداً. كما أنه غير شفاف من حيث أنه لا يكشف عن أي شيء عن المستخدم ولا يمكن استخدامه كمعرف لاستعلامات السمات.
يتم دائماً تعيين السمة Method للعنصر SubjectConfirmation على urn:oasis:names:tc:SAML:2.0:cm:bearer.
<Subject>
<NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
</SubjectConfirmation>
</Subject>
شروط
يحدد ذلك العنصر الشروط التي تحدد الاستخدام المقبول لتأكيدات SAML.
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
تحدد السمات NotBefore و NotOnOrAfter الفاصل الزمني الذي يكون فيه التأكيد صالحاً.
- قيمة السمة
NotBeforeتساوي أو تتأخر قليلاً (أقل من ثانية) عن قيمة السمةIssueInstantللعنصرAssertion. لا يأخذ Microsoft Azure Active Directory أي فارق زمني بينه وبين الخدمة السحابية (موفر الخدمة)، ولا يضيف أي مخزن مؤقت إلى هذا الوقت. - تأتي قيمة السمة
NotOnOrAfterبعد 70 دقيقة من قيمة السمةNotBefore.
الجمهور
يحتوي هذا على عنوان URI الذي يحدد الجمهور المستهدف. يقوم Microsoft Azure Active Directory بتعيين قيمة هذا العنصر إلى قيمة Issuer عنصر الذي بدأ تسجيل AuthnRequest الدخول. لتقييم قيمة Audience، استخدم قيمة App ID URI التي تم تحديدها أثناء تسجيل التطبيق.
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
مثل قيمة Issuer، يجب أن تتطابق قيمة Audience تماماً مع أحد الأسماء الأساسية للخدمة التي تمثل الخدمة السحابية في Microsoft Azure Active Directory. ومع ذلك، إذا كانت قيمة Issuer العنصر ليست قيمة عنوان URI، Audience فإن القيمة في الاستجابة هي Issuer القيمة المثبتة مسبقا مع spn:.
بيان السمة
يتضمن هذا على مطالبات حول الموضوع أو المستخدم. يُظهر المقتطف التالي عينة العنصر AttributeStatement. تشير علامة القطع إلى أن العنصر يمكن أن يتضمن سمات وقيم سمات متعددة.
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>testuser@contoso.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
<AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
</Attribute>
...
</AttributeStatement>
- المطالبة بالاسم - قيمة السمة
Name(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) هي الاسم الأساسي للمستخدم الذي تمت مصادقته، مثلtestuser@managedtenant.com. - مطالبة معرف العنصر - قيمة السمة
ObjectIdentifier(http://schemas.microsoft.com/identity/claims/objectidentifier) هيObjectIdعنصر الدليل الذي يمثل المستخدم المصادق عليه في Microsoft Azure Active Directory. يعدObjectIdمعرّفاً غير قابل للتغيير، وفريداً عالمياً، وآمناً للمستخدم المصادق عليه.
بيان المصادقة
يؤكد هذا العنصر أن موضوع التوكيد قد تمت المصادقة عليه من خلال وسيلة معينة في وقت معين.
- تحدد السمة
AuthnInstantالوقت الذي قام فيه المستخدم بالمصادقة باستخدام Microsoft Azure Active Directory. - يحدد العنصر
AuthnContextسياق المصادقة المستخدم لمصادقة المستخدم.
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
<AuthnContext>
<AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>