إعداد الاشتراك وتسجيل الدخول باستخدام OpenID Connect عام باستخدام Azure Active Directory B2C

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

OpenID Connect هو بروتوكول مصادقة مبني على قمة OAuth 2.0 يمكن استخدامه لتأمين تسجيل دخول المستخدم. يتم اعتماد معظم موفري الهوية الذين يستخدمون هذا البروتوكول في Azure AD B2C.

توضح هذه المقالة كيفية إضافة موفري هوية OpenID Connect مخصصين إلى تدفق المستخدم.

هام

يجب أن تتوافق نقاط النهاية الخاصة بك مع متطلبات أمان Microsoft Azure AD B2C. أُوقِف العمل بإصدارات وأصفار TLS الأقدم. لمزيد من المعلومات، راجع متطلبات مجموعة TLS والتشفير.

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

إضافة موفر الهوية

  1. سجّل الدخول إلى مدخل Azure بصفتك المسؤول العام عن مستأجر Azure AD B2C.
  2. إذا كان لديك حق الوصول إلى عدة مستأجرين، فحدد رمز الإعدادات في القائمة العلوية للتبديل إلى مستأجر Azure AD B2C من قائمة Directories + subscriptions.
  3. اختر All services في الزاوية العلوية اليسرى من مدخل Microsoft Azure، ثم ابحث عن Azure AD B2C وحدده.
  4. حدّد Identity providers، ثم حدّد موفر OpenID Connect جديد.
  5. أدخل اسمًا. على سبيل المثال، أدخل Contoso.

حدد موفر هوية OpenId Connect عن طريق إضافته إلى عنصر ClaimsProviders في ملف الامتداد الخاص بسياستك.

  1. افتح TrustFrameworkExtensions.xml.

  2. ابحث عن عنصر ClaimsProviders. إذا لم يكن موجودًا، فقم بإضافته تحت عنصر الجذر.

  3. قم بإضافة ClaimsProvider جديد على النحو التالي:

    <ClaimsProvider>
      <Domain>contoso.com</Domain>
      <DisplayName>Login with Contoso</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Contoso-OpenIdConnect">
          <DisplayName>Contoso</DisplayName>
          <Description>Login with your Contoso account</Description>
          <Protocol Name="OpenIdConnect"/>
          <Metadata>
            <Item Key="METADATA">https://your-identity-provider.com/.well-known/openid-configuration</Item>
            <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
            <Item Key="response_types">code</Item>
            <Item Key="scope">openid profile</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">false</Item>
          </Metadata>
          <!-- <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/>
          </CryptographicKeys> -->
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/>
            <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/>
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
            <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid"/>
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    

تكوين موفر الهوية

يصف كل موفر هوية OpenID Connect مستند بيانات التعريف الذي يحتوي على معظم المعلومات المطلوبة لتنفيذ تسجيل الدخول. يتضمن مستند بيانات التعريف معلومات مثل URLs لاستخدامها وموقع مفاتيح التوقيع العامة للخدمة. يوجد مستند بيانات التعريف OpenID Connect دائمًا عند نقطة نهاية تنتهي في .well-known/openid-configuration. بالنسبة لموفر الهوية OpenID Connect الذي تبحث عنه لإضافته، أدخل URL الخاص به لبيانات التعريف.

في "Metadata url"، أدخل URL لمستند بيانات التعريف OpenID Connect.

في <Item Key="METADATA"> بيانات التعريف التشكيل الجانبي التقنية، أدخل URL لمستند بيانات التعريف OpenID Connect.

معرف العميل وبيانات السرية

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

بيانات العميل السرية اختيارية. ومع ذلك، يجب توفير عميل سري إذا كان نوع الاستجابةcode هو، والذي يستخدم السر لتبادل التعليمات البرمجية للرمز المميز.

لإضافة معرف العميل وبيانات العميل السرية، انسخ هذه القيم من موفر الهوية وأدخلها في الحقول المقابلة.

في <Item Key="client_id"> بيانات تعريف التشكيل الجانبي التقنية، أدخل معرف العميل.

إنشاء مفتاح نهج

إذا كانت بيانات العميل السرية مطلوبة، خزن بيانات العميل السرية التي سجلتها مسبقًا في مستأجر Azure AD B2C.

  1. سجل الدخول إلى مدخل Azure.

  2. تأكد من استخدام الدليل الذي يحتوي على مستأجر Azure AD B2C. حدّد أيقونة "Directory + subscription" في شريط أدوات المدخل.

  3. في صفحة Portal settings | Directories + subscriptions ابحث عن دليل Azure AD B2C في قائمة Directory name ثم حدّد Switch.

  4. اختر كل الخدمات في الزاوية العلويةِ اليسرى من مدخل Microsoft Azure، ثم ابحث عن Azure AD B2Cوحدده.

  5. في صفحة نظرة عامة، حدد Identity Experience Framework.

  6. حدد Policy Keys ثم حدد Add.

  7. بالنسبة للخيارات، اختر Manual .

  8. أدخِل اسمًا لمفتاح النهج. على سبيل المثال، ContosoSecret. تتم إضافة البادئة B2C_1A_ تلقائيًا إلى اسم مفتاحك.

  9. في بيانات، أدخل بيانات العميل التي سجلتها سابقًا.

  10. بالنسبة إلى Key usage، حدد Signature.

  11. انقر فوق إنشاء.

  12. في عنصر XML CryptographicKeys، أضف العنصر التالي:

    <CryptographicKeys>
      <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/>
    </CryptographicKeys>
    

Scope

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

بدون رمز ID المميز، لن يتمكن المستخدمون من تسجيل الدخول إلى Azure AD B2C باستخدام موفر الهوية المخصص. يمكن إلحاق نطاقات أخرى مفصولة حسب المساحة. راجع وثائق موفر الهوية المخصص لمعرفة النطاقات الأخرى التي قد تكون متوفرة.

في "Scope"، أدخل النطاقات من موفر الهوية. على سبيل المثال، openid profile.

في <Item Key="scope"> بيانات تعريف التشكيل الجانبي التقنية، أدخل النطاقات من موفر الهوية. على سبيل المثال، openid profile.

نوع الاستجابة

يصف نوع الاستجابة نوع المعلومات التي يتم إرسالها مرة أخرى في الاتصال الأولي إلى authorization_endpoint موفر الهوية المخصص. يمكن استخدام أنواع الاستجابة التالية:

  • code: وفقًا لتدفق كود التفويض، سيتم إرجاع التعليمات البرمجية إلى Azure AD B2C. يستمر Azure AD B2C في الاتصال بـ token_endpoint لتبادل التعليمات البرمجية للرمز المميز.
  • id_token: يتم إرجاع رمز ID مميز إلى Azure AD B2C من موفر الهوية المخصص.

في Response type، حدد code، أو id_token، وفقًا لإعدادات موفر الهوية.

في <Item Key="response_types"> بيانات تعريف التشكيل الجانبي التقنية، حدد code، أو id_token وفقًا لإعدادات موفر الهوية.

وضع الاستجابة.

يعرف وضع الاستجابة الطريقة التي يجب استخدامها لإرسال البيانات مرة أخرى من موفر الهوية المخصص إلى Azure AD B2C. يمكن استخدام أوضاع الاستجابة التالية:

  • form_post: ينصح بوضع الاستجابة هذا للحصول على أفضل أمان. يتم إرسال الاستجابة عبر طريقة HTTP POST، مع ترميز التعليمات البرمجية أو الرمز المميز في النص باستخدام التنسيق application/x-www-form-urlencoded.
  • query: يتم إرجاع التعليمات البرمجية أو الرمز المميز كمعلمة استعلام.

في Response mode، حدد form_post، أو query، وفقًا لإعدادات موفر الهوية.

في <Item Key="response_mode"> بيانات تعريف التشكيل الجانبي التقنية، حدد form_post، أو query وفقًا لإعدادات موفر الهوية.

تلميح عن المجال

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

للسماح بهذا النوع من السلوك، أدخل قيمة تلميح النطاق. للانتقال إلى موفر الهوية المخصص، أضف المعلمة domain_hint=<domain hint value> إلى نهاية طلبك عند الاتصال بـAzure AD B2C لتسجيل الدخول.

في تلميح النطاق، أدخل اسم نطاق مستخدم في تلميح النطاق.

في <Domain>contoso.com</Domain> عنصر XML للتشكيل الجانبي الفني، أدخل اسم نطاق مستخدم في تلميح النطاق. على سبيل المثال، contoso.com.

تعيين المطالبات

بعد أن يرسل موفر الهوية المخصص رمز ID المميز إلى Azure AD B2C، يحتاج Azure AD B2C إلى أن يكون قادرًا على تعيين المطالبات من الرمز المميز المستلم للمطالبات التي يتعرف عليها Azure AD B2C ويستخدمها. لكل تعيين من التعيينات التالية، راجع وثائق موفر الهوية المخصص لفهم المطالبات التي يتم إرجاعها مرة أخرى في الرموز المميزة لموفر الهوية:

  • "User ID": أدخل المطالبة التي توفر المعرف الفريد للمستخدم الذي قام بتسجيل الدخول.
  • "Display Name": أدخل المطالبة التي توفر اسم العرض أو الاسم الكامل للمستخدم.
  • "Given Name": أدخل المطالبة التي توفر الاسم الأول للمستخدم.
  • "Surname": أدخل المطالبة التي توفر اسم عائلة المستخدم.
  • "Email": أدخل المطالبة التي توفر عنوان البريد الإلكتروني للمستخدم.

يحتوي عنصر OutputClaims على قائمة المطالبات التي تم إرجاعها من قِبل موفر الهوية الخاص بك. تعيين اسم المطالبة المعرفة في سياستك إلى الاسم المحدد في موفر الهوية. من العنصر <OutputClaims>، كون السمة PartnerClaimType باسم المطالبة المطابق كما هو معرف من قِبل موفر الهوية الخاص بك.

ClaimTypeReferenceId PartnerClaimType
issuerUserId أدخل المطالبة التي توفر المعرف الفريد للمستخدم الذي قام بتسجيل الدخول.
displayName أدخل المطالبة التي توفر اسم العرض أو الاسم الكامل للمستخدم.
givenName أدخل المطالبة التي توفر الاسم الأول للمستخدم.
surName أدخل المطالبة التي توفر اسم العائلة للمستخدم.
email أدخل المطالبة التي توفر عنوان البريد الإلكتروني للمستخدم.
identityProvider أدخل المطالبة التي توفر اسم مصدر الرمز المميز. على سبيل المثال، iss. إذا لم يتضمن موفر الهوية مطالبة المصدر في الرمز المميز، عيّن السمة DefaultValue بمعرف فريد لموفر الهوية. على سبيل المثال، DefaultValue="contoso.com".

أضف موفر الهوية إلى تدفق المستخدم

  1. في مستأجر Azure AD B2C، حدّد User flows.
  2. انقر فوق تدفق المستخدم الذي تريد إضافة موفر الهوية.
  3. من "Social identity providers"، حدد موفر الهوية الذي أضفته. على سبيل المثال، Contoso.
  4. حدد حفظ.

اختبار تدفق المستخدم لديك

  1. لاختبار سياستك، حدّد "Run user flow".
  2. للتطبيق، حدد تطبيق الويب المسمى testapp1 الذي قمت بتسجيله مسبقًا. عنوان URL الرد يجب أن يعرض https://jwt.ms.
  3. حدّد الزر تشغيل تدفق المستخدم.
  4. من صفحة الاشتراك أو تسجيل الدخول، حدد موفر الهوية الذي تريد تسجيل الدخول إليه. على سبيل المثال، Contoso.

إذا نجحت عملية تسجيل الدخول، فستتم إعادة توجيه المستعرض الخاص بك إلى، https://jwt.ms، والذي يعرض محتويات الرمز المميز الذي تم إرجاعه بواسطة Azure AD B2C.

إضافة الرحلة الخاصة بالمستخدم

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

  1. من حزمة البداية، افتح المَلف TrustFrameworkBase.xml.
  2. ابحث عن المحتويات الكاملة لعنصر UserJourney الذي يتضمن Id="SignUpOrSignIn" وانسخها.
  3. افتح TrustFrameworkExtensions.xml وابحث عن عنصر UserJourneys. إذا لم يكن العنصر موجودًا، فأضف عنصرًا.
  4. الصق المحتوى الكامل لعنصر UserJourney الذي نسخته كعنصر تابع لعنصر UserJourneys.
  5. أعِد تسمية المعرف الخاص بالرحلة. على سبيل المثال، Id="CustomSignUpSignIn".

إضافة موفر الهوية إلى الرحلة

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

  1. ابحث عن عنصر خطوة التنسيق الذي يتضمن Type="CombinedSignInAndSignUp"، أو Type="ClaimsProviderSelection" في الرحلة. عادةَ ما تكون الخطوة الأولى للتزامن. يحتوي عنصر ClaimsProviderSelections على قائمة موفري الهوية التي يمكن للمستخدم تسجيل الدخول من خلالها. يتحكم ترتيب العناصر في ترتيب أزرار تسجيل الدخول التي يتم عرضها للمستخدم. أضف عنصر XML ClaimsProviderSelection. تعيين قيمة TargetClaimsExchangeId إلى اسم مألوف.

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

يوضح XML التالي أول خطوتين للتنسيق لرحلة المستخدم من خلال موفر الهوية:

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    ...
    <ClaimsProviderSelection TargetClaimsExchangeId="ContosoExchange" />
  </ClaimsProviderSelections>
  ...
</OrchestrationStep>

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="Contoso-OpenIdConnect" />
  </ClaimsExchanges>
</OrchestrationStep>

تكوين نهج جهة الاعتماد

يحدد نهج جهة الاعتماد، على سبيل المثال SignUpSignIn.xml، رحلة المستخدم التي سيقوم Azure AD B2C بتنفيذها. ابحث عن العنصر DefaultUserJourney ضمن جهة الاعتماد. قم بتحديث ReferenceId ليطابق معرّف رحلة المستخدم، الذي أضفت فيه موفر الهوية.

في المثال التالي، بالنسبة إلى CustomSignUpSignInرحلة المستخدم، تم تعيين ReferenceId إلى CustomSignUpSignIn:

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

تحميل النهج المخصص

  1. سجل الدخول إلى مدخل Azure.
  2. حدد مرشح «الدليل+الاشتراك»في القائمة العلوية، ثم حدد الدليل الذي يحتوي على مستأجر Azure AD B2C.
  3. في مدخل Microsoft Azure، ابحث عن Azure AD B2C وحددها.
  4. ضمن Policies، حدد Identity Experience Framework.
  5. حدّد Upload Custom Policy، ثم قم بتحميل ملفي النهج اللذين قمت بتغييرهما بالترتيب التالي: نهج التوسيع، على سبيل المثال TrustFrameworkExtensions.xml، ثم نهج جهة الاعتماد، مثل SignUpSignIn.xml.
  1. حدد نهج جهة الاعتماد، على سبيل المثالB2C_1A_signup_signin.
  2. للوصول إلى التطبيق، حدّد تطبيق الويب الذي قمت بتسجيله مسبقاً. عنوان URL الرد يجب أن يعرض https://jwt.ms.
  3. حدّدالتشغيل الآن الزر.
  4. من صفحة الاشتراك أو تسجيل الدخول، حدّد "Contoso" لتسجيل الدخول باستخدام حساب Google.

إذا نجحت عملية تسجيل الدخول، فستتم إعادة توجيه المستعرض الخاص بك إلى، https://jwt.ms، والذي يعرض محتويات الرمز المميز الذي تم إرجاعه بواسطة Azure AD B2C.

المشكلات المعروفة

  • لا يدعم Azure AD B2C JWE (تشفير ويب JSON) لتبادل الرموز المميزة المشفرة مع موفري هوية اتصال OpenID.

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

للبحث عن مزيدٍ من المعلومات راجع دليل مرجع الملف التشكيل الجانبي التقني لـOpenId Connect.