خيارات تسجيل تطبيق SAML في Microsoft Azure Active Directory B2C

توضح هذه المقالة خيارات التكوين المتوفرة عند توصيل Azure Active Directory B2C (Microsoft Azure Active Directory B2C) بتطبيق لغة ترميز تأكيد الأمان (SAML).

قبل أن تبدأ استخدم اختر نوع النهجالمحدد لاختيار نوع النهج التي تقوم بإعدادها. يوفر Azure Active Directory B2C طريقتين لتحديد كيفية تفاعل المستخدمين مع تطبيقاتك: من خلال تدفقات محددة مسبقا للمستخدمين أو من خلال سياسات مخصصة قابلة للتكوين بشكل كامل. تختلف الخطوات المطلوبة في هذه المقالة لكل أسلوب.

هذه الميزة متاحة فقط للسياسات المخصصة. لخطوات الإعداد، حدد نهج مخصص في المحدد السابق.

تحديد توقيع استجابة SAML

يمكنك تحديد شهادة لاستخدامها في توقيع رسائل SAML. الرسالة هي العنصر <samlp:Response> في استجابة SAML المرسلة إلى التطبيق.

إذا لم يكن لديك بالفعل مفتاح سياسة، قم بإنشاء واحد . ثم قم بتهيئة عنصر بيانات التعريفSamlMessageSigning في الملف الشخصي الفني لجهة إصدار SAML Token. يجب أن يشير StorageReferenceId إلى اسم مفتاح السياسة.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

خوارزمية التوقيع

يمكنك تكوين خوارزمية التوقيع المستخدمة للتوقيع على تأكيد SAML. القيم المحتملة هي Sha256 أو Sha384 أو Sha512 أو Sha1. تأكد من أن الملف الشخصي الفني والتطبيق يستخدمان نفس خوارزمية التوقيع. لا تستخدم إلا الخوارزمية التي تدعمها الشهادة.

قم بتكوين خوارزمية التوقيع باستخدام مفتاح بيانات التعريف XmlSignatureAlgorithm داخل عنصر الطرف المعتمد Metadata.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="XmlSignatureAlgorithm">Sha256</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

التحقق من توقيع تأكيد SAML

عندما يتوقع تطبيقك أن يتم توقيع قسم تأكيد SAML، تأكد من أن مزود خدمة SAML عيّن WantAssertionsSigned على true. إذا تم التعيين على false أو لم يكن موجودًا، فلن يتم توقيع قسم التأكيد.

يعرض المثال التالي بيانات تعريف لمقدم خدمة SAML، مع ضبط WantAssertionsSigned على true.

<EntityDescriptor ID="id123456789" entityID="https://samltestapp2.azurewebsites.net" validUntil="2099-12-31T23:59:59Z" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
  <SPSSODescriptor WantAssertionsSigned="true" AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  ...
  </SPSSODescriptor>
</EntityDescriptor>

شهادة التوقيع

يجب أن تحدد سياستك شهادة لاستخدامها لتوقيع قسم تأكيدات SAML في استجابة SAML. إذا لم يكن لديك بالفعل مفتاح سياسة، قم بإنشاء واحد . ثم قم بتهيئة عنصر بيانات التعريفSamlAssertionSigning في الملف الشخصي الفني لجهة إصدار SAML Token. يجب أن يشير StorageReferenceId إلى اسم مفتاح السياسة.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

تفعيل التشفير في تأكيدات SAML

عندما يتوقع تطبيقك أن تكون تأكيدات SAML بتنسيق مشفر، تأكد من تمكين التشفير في نهج Microsoft Azure Active Directory B2C.

يستخدم Microsoft Azure Active Directory B2C شهادة المفتاح العام لموفر الخدمة لتشفير تأكيد SAML. يجب أن يكون المفتاح العام موجوداً في نقطة نهاية بيانات التعريف لتطبيق SAML مع تعيين القيمة KeyDescriptoruse على Encryption، كما هو موضح في المثال التالي:

<KeyDescriptor use="encryption">
  <KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
    <X509Data>
      <X509Certificate>valid certificate</X509Certificate>
    </X509Data>
  </KeyInfo>
</KeyDescriptor>

لتمكين Microsoft Azure Active Directory B2C من إرسال تأكيدات مشفرة، قم بتعيين عنصر بيانات تعريف WantsEncryptedAssertion إلى true في ملف التعريف الفني للجهة المعتمدة . يمكنك أيضًا تكوين الخوارزمية المستخدمة لتشفير تأكيد SAML.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="WantsEncryptedAssertions">true</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

أسلوب التشفير

لتكوين طريقة التشفير المستخدمة لتشفير بيانات تأكيد SAML، قم بتعيين مفتاح بيانات تعريفDataEncryptionMethod داخل الطرف المعتمد. القيم المحتملة هي Aes256 (افتراضي) أو Aes192 أو Sha512 أو Aes128. تتحكم بيانات التعريف في قيمة العنصر <EncryptedData> في استجابة SAML.

لتكوين طريقة التشفير لتشفير نسخة المفتاح التي تم استخدامها لتشفير بيانات تأكيد SAML، قم بتعيين مفتاح بيانات التعريف KeyEncryptionMethod داخل الطرف المعتمد. القيم المحتملة هي:

  • Rsa15 (افتراضي): خوارزمية الإصدار 1.5 من معيار تشفير المفتاح العام RSA (PKCS).
  • RsaOaep: خوارزمية تشفير حشوة التشفير غير المتماثل الأمثل RSA (OAEP).

تتحكم بيانات التعريف في قيمة العنصر <EncryptedKey> في استجابة SAML.

يوضح المثال التالي قسم EncryptedAssertion لتأكيد SAML. طريقة البيانات المشفرة هي Aes128، وطريقة المفتاح المشفر هي Rsa15.

<saml:EncryptedAssertion>
  <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
    xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Type="http://www.w3.org/2001/04/xmlenc#Element">
    <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
    <dsig:KeyInfo>
      <xenc:EncryptedKey>
        <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
        <xenc:CipherData>
          <xenc:CipherValue>...</xenc:CipherValue>
        </xenc:CipherData>
      </xenc:EncryptedKey>
    </dsig:KeyInfo>
    <xenc:CipherData>
      <xenc:CipherValue>...</xenc:CipherValue>
    </xenc:CipherData>
  </xenc:EncryptedData>
</saml:EncryptedAssertion>

بمقدورك تغيير تنسيق التأكيدات المشفرة. لتكوين تنسيق التشفير، قم بتعيين مفتاح بيانات التعريف UseDetachedKeys داخل الطرف المعتمد. القيم المحتملة: true، أو false (افتراضي). عند تعيين القيمة على true، تضيف المفاتيح المنفصلة التأكيد المشفر باعتباره تابعًا لـEncryptedAssertion بدلًا من EncryptedData.

قم بتكوين طريقة التشفير والتنسيق باستخدام مفاتيح بيانات التعريف في ملف التعريف الفني لجهة الاعتماد :

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="DataEncryptionMethod">Aes128</Item>
      <Item Key="KeyEncryptionMethod">Rsa15</Item>
      <Item Key="UseDetachedKeys">false</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

تكوين التدفق المبدئي لموفر الهوية

عندما يتوقع تطبيقك تلقي تأكيد SAML دون إرسال طلب مصادقة SAML أولًا إلى موفر الهوية (IdP)، يجب عليك تكوين Microsoft Azure Active Directory B2C للتدفق المبدئي لموفر الهوية.

في التدفق المبدئي لموفر الهوية، يبدأ موفر الهوية (Microsoft Azure Active Directory B2C) عملية تسجيل الدخول. يرسل موفر الهوية استجابة SAML غير مرغوب فيها إلى مزود الخدمة (تطبيق الجهة المعتمدة لديك).

لا ندعم حاليًا السيناريوهات التي يكون فيها موفر الهوية المبدئي هو موفر هوية خارجي متحد مع Microsoft Azure Active Directory B2C، مثل خدمات الأمان المشترك لـActive Directory أو Salesforce . يتم دعم التدفق المبدئي لموفر الهوية فقط لمصادقة الحساب المحلي في Microsoft Azure Active Directory B2C.

لتمكين التدفق المبدئي لموفر الهوية، عيّن IdpInitiatedProfileEnabled عنصر بيانات التعريف إلى true في الملف الشخصي الفني للجهة المعتمدة .

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="IdpInitiatedProfileEnabled">true</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

لتسجيل الدخول أو تسجيل مستخدم من خلال التدفق المبدئي لموفر الهوية، استخدم عنوان URL التالي:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=<app-identifier-uri>&RelayState=<relay-state> 

استبدل القيم التالية:

  • استبدل <tenant-name> باسم المستأجر الخاص بك.
  • استبدل <policy-name> باسم سياسة الطرف المعتمد على SAML.
  • استبدل <app-identifier-uri> بقيمة identifierUris في ملف بيانات التعريف، مثل https://contoso.onmicrosoft.com/app-name.
  • [اختياري] استبدل <relay-state> بقيمة مضمنة في طلب التفويض والتي يتم إرجاعها أيضاً في استجابة الرمز المميز. تُستخدم المعلمة relay-state لتشفير المعلومات حول حالة المستخدم في التطبيق قبل حدوث طلب المصادقة، مثل الصفحة التي كانوا فيها.

نموذج النهج

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

  1. قم بتنزيل نموذج سياسة تسجيل الدخول المبدئي SAML-SP .
  2. قم بتحديث TenantId ليلائم اسم المستأجر الخاص بك. تستخدم هذه المقالة المثال contoso.b2clogin.com .
  3. احتفظ باسم النهج B2C_1A_signup_signin_saml .

تهيئة مدة استجابة SAML

يمكنك تهيئة طول الفترة الزمنية التي تظل فيها استجابة SAML صالحة. عيّن العمر باستخدام عنصر بيانات التعريف TokenLifeTimeInSeconds داخل الملف الشخصي الفني لجهة إصدار SAML Token. هذه القيمة هي عدد الثواني التي يمكن أن تنقضي من الطابع الزمني NotBefore، المحسوب في وقت إصدار الرمز المميز. مدة البقاء الافتراضي هو 300 ثانية (خمس دقائق).

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <Item Key="TokenLifeTimeInSeconds">400</Item>
      </Metadata>
      ...
    </TechnicalProfile>

تهيئة الانحراف الزمني لاستجابة SAML

يمكنك تهيئة الانحراف الزمني المطبق على الطابع الزمني لاستجابة SAML NotBefore. يضمن هذا التكوين أنه في حالة عدم مزامنة الأوقات بين نظامين أساسيين، فسيظل تأكيد SAML صالحًا عندما يكون في غضون هذا الوقت.

عيّن الانحراف الزمني باستخدام عنصر بيانات التعريف TokenNotBeforeSkewInSeconds ضمن الملف الشخصي الفني لجهة إصدار رمز SAML. يتم إعطاء قيمة الانحراف بالثواني، مع القيمة الافتراضية 0. القيمة النموذجية هي 3600 (ساعة واحدة).

على سبيل المثال، عند ضبط TokenNotBeforeSkewInSeconds على 120 ثانية:

  • تم إصدار الرمز المميز في الساعة 13:05:10 بالتوقيت العالمي المنسق.
  • الرمز المميز صالح من الساعة 13:03:10 بالتوقيت العالمي المنسق.
<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <Item Key="TokenNotBeforeSkewInSeconds">120</Item>
      </Metadata>
      ...
    </TechnicalProfile>

إزالة مللي ثانية من التاريخ والوقت

يمكنك تحديد ما إذا كانت ستتم إزالة المللي ثانية من قيم التاريخ والوقت ضمن استجابة SAML. (تتضمن هذه القيم IssueInstant و NotBefore و NotOnOrAfter و AuthnInstant.) لإزالة المللي ثانية، قم بتعيين مفتاح بيانات التعريف RemoveMillisecondsFromDateTime داخل المجموعة المعتمدة. القيم المحتملة: false(افتراضي)، أو true.

  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2" />
      <Metadata>
        <Item Key="RemoveMillisecondsFromDateTime">true</Item>
      </Metadata>
      <OutputClaims>
             ...
      </OutputClaims>
      <SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true" />
    </TechnicalProfile>
  </RelyingParty>

استخدام معرف المُصدر لتجاوز URI المُصدر

إذا كان لديك العديد من تطبيقات SAML التي تعتمد على قيم entityID مختلفة، فيمكنك تجاوز قيمة IssuerUri في ملف جهة الاعتماد. لتجاوز URI المُصدر، انسخ ملف التعريف الفني باستخدام المعرف Saml2AssertionIssuer من الملف الأساسي وتجاوز قيمة IssuerUri.

تلميح

انسخ قسم <ClaimsProviders> من القاعدة واحتفظ بتلك العناصر داخل موفر المطالبات: <DisplayName>Token Issuer</DisplayName>، <TechnicalProfile Id="Saml2AssertionIssuer">، و <DisplayName>Token Issuer</DisplayName>.

مثال:

   <ClaimsProviders>   
    <ClaimsProvider>
      <DisplayName>Token Issuer</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Saml2AssertionIssuer">
          <DisplayName>Token Issuer</DisplayName>
          <Metadata>
            <Item Key="IssuerUri">customURI</Item>
          </Metadata>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
  </ClaimsProviders>
  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpInSAML" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2" />
      <Metadata>
     …

إدارة جلسات

يمكنك إدارة الجلسة بين Microsoft Azure Active Directory B2C وتطبيق الطرف المعتمد على SAML باستخدام عنصر UseTechnicalProfileForSessionManagement و SamlSSOSessionProvider .

إرغام المستخدمين على إعادة المصادقة

لإجبار المستخدمين على إعادة المصادقة، يمكن للتطبيق تضمين السمة ForceAuthn في طلب مصادقة SAML. السمة ForceAuthn هي قيمة منطقية. عند التعيين على true، سيتم إبطال جلسة المستخدم في Microsoft Azure Active Directory B2C، وسيُجبر المستخدم على إعادة المصادقة.

يوضح طلب مصادقة SAML التالي كيفية تعيين السمة ForceAuthn على true.

<samlp:AuthnRequest 
       Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_SAML2_signup_signin/samlp/sso/login"
       ForceAuthn="true" ...>
    ...
</samlp:AuthnRequest>

قم بتسجيل بيانات التعريف لـMicrosoft Azure Active Directory B2C IdP SAML

يمكنك توجيه تعليمات إلى Microsoft Azure Active Directory B2C لتوقيع مستند البيانات التعريفية الخاص به لموفر هوية SAML، إذا كان التطبيق يتطلب ذلك. إذا لم يكن لديك بالفعل مفتاح سياسة، قم بإنشاء واحد . ثم قم بتهيئة عنصر بيانات التعريفMetadataSigning في الملف الشخصي الفني لجهة إصدار SAML Token. يجب أن يشير StorageReferenceId إلى اسم مفتاح السياسة.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="MetadataSigning" StorageReferenceId="B2C_1A_SamlMetadataCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

تصحيح أخطاء بروتوكول SAML

للمساعدة في تكوين وتصحيح التكامل مع مزود الخدمة الخاص بك، يمكنك استخدام امتداد متصفح لبروتوكول SAML. تتضمن امتدادات المتصفح امتداد SAML DevTools لمتصفح Chrome و SAML-tracer لمتصفح Firefox و أدوات المطور لـEdge أو Internet Explorer .

باستخدام هذه الأدوات، يمكنك التحقق من التكامل بين التطبيق الخاص بك وMicrosoft Azure Active Directory B2C. على سبيل المثال:

  • تحقق مما إذا كان طلب SAML يحتوي على توقيع وحدد الخوارزمية المستخدمة لتسجيل الدخول في طلب التفويض.
  • تحقق مما إذا كان Microsoft Azure Active Directory B2C يُرجع رسالة خطأ.
  • تحقق مما إذا كان قسم التأكيد مشفرًا.

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