UserJourneys

إشعار

في Azure Active Directory B2C، تم تصميم النُهج المخصصة بشكل أساسي لمعالجة السيناريوهات المعقدة. بالنسبة إلى معظم السيناريوهات، نوصي باستخدام تدفقات المستخدم المضمنة. إذا لم تقم بذلك، تعرف على حزمة بادئ النهج المخصصة في البدء باستخدام النهج المخصصة في Active Directory B2C.

تحدد رحلات المستخدم مسارات واضحة تسمح السياسة من خلالها لتطبيق الجهة المعتمدة بالحصول على المطالبات المطلوبة للمستخدم. يتم أخذ المستخدم من خلال هذه المسارات لاسترداد المطالبات التي سيتم تقديمها إلى الطرف المعتمد. بمعنى آخر، تحدد رحلات المستخدم منطق الأعمال لما يمر به المستخدم النهائي أثناء معالجة Azure AD B2C Identity Experience Framework الطلب.

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

لتحديد رحلات المستخدم التي تدعمها السياسة، تتم إضافة عنصر UserJourneys ضمن عنصر TrustFrameworkPolicy للمستوى الأعلى لملف السياسة.

<TrustFrameworkPolicy  ...>
  ...
  <UserJourneys>
    ...
  </UserJourneys>
</TrustFrameworkPolicy>

يحتوي العنصر Predicates على العنصر التالي:

العنصر الأحداث ‏‏الوصف
UserJourney 1:n رحلة مستخدم تحدد جميع التركيبات اللازمة لتدفق المستخدم الكامل.

يحتوي عنصر UserJourney على السمة التالية:

السمة المطلوب ‏‏الوصف
المعرّف ‏‏نعم‬ معرّف رحلة مستخدم يمكن استخدامه للإشارة إليها من عناصر أخرى في السياسة. يشير عنصر DefaultUserJourney الخاص بسياسة الجهة المعتمدة إلى هذه السمة.
DefaultCpimIssuerTechnicalProfileReferenceId لا المعرف المرجعي للملف الشخصي الفني لمصدر الرمز المميز الافتراضي. على سبيل المثال، مصدر رمز JWT المميز أو مصدر رمز SAML المميز أو خطأ OAuth2 المخصص. إذا كانت رحلة المستخدم أو الرحلة الفرعية تحتوي بالفعل على SendClaimsخطوة تنسيق أخرى، فقم بتعيين السمة DefaultCpimIssuerTechnicalProfileReferenceId إلى الملف الشخصي الفني لمصدر الرمز المميز لرحلة المستخدم.

يحتوي العنصر UserJourney على العنصر التالي:

العنصر الأحداث ‏‏الوصف
AuthorizationTechnicalProfiles 0:1 قائمة ملفات التعريف التقنية للتخويل.
OrchestrationSteps 1:n تسلسل التزامن الذي يجب اتباعه من أجل عملية ناجحة. تتكون كل رحلة من قائمة مرتّبة بخطوات التنسيق التي يتم تنفيذها في التسلسل. إذا فشلت أي خطوة، تفشل العملية.

AuthorizationTechnicalProfiles

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

يحتوي عنصر AuthorizationTechnicalProfiles على العنصر التالي:

العنصر الأحداث ‏‏الوصف
AuthorizationTechnicalProfile 0:1 مرجع ملف التعريف الفني المستخدم لتخويل المستخدم.

يحتوي العنصر AuthorizationTechnicalProfile على السمة التالية:

السمة المطلوب ‏‏الوصف
ReferenceId ‏‏نعم‬ معرف ملف التعريف التقني الذي سيتم تنفيذه.

يتم تمثيل رحلة مستخدم كتسلسل تزامن يجب اتباعه من خلال معاملة ناجحة:

<UserJourney Id="UserInfoJourney" DefaultCpimIssuerTechnicalProfileReferenceId="UserInfoIssuer">
  <Authorization>
    <AuthorizationTechnicalProfiles>
      <AuthorizationTechnicalProfile ReferenceId="UserInfoAuthorization" />
    </AuthorizationTechnicalProfiles>
  </Authorization>
  <OrchestrationSteps>
    <OrchestrationStep Order="1" Type="ClaimsExchange">
     ...

OrchestrationSteps

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

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

لتحديد قائمة مرتبة من خطوات التزامن، يتم إضافة عنصر OrchestrationSteps كجزء من النهج. هذا العنصر مطلوب.

<UserJourney Id="SignUpOrSignIn">
  <OrchestrationSteps>
    <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
      ...

يحتوي العنصر OrchestrationSteps على العنصر التالي:

العنصر الأحداث ‏‏الوصف
OrchestrationStep 1:n خطوة تزامن مرتبة.

يحتوي العنصر OrchestrationStep على السمات التالية:

السمة المطلوب الوصف
Order ‏‏نعم‬ ترتيب خطوات التزامن. تبدأ 1 قيمة السمة من Order خلال N. لذلك، إذا كان لديك 10 خطوات وقمت بحذف الخطوة الثانية، فأنت بحاجة إلى إعادة ترقيم الخطوات من ثلاث إلى 10 لتصبح من اثنين إلى تسعة.
Type ‏‏نعم‬ نوع خطوة التزامن. القيم المحتملة:
  • ClaimsProviderSelection - يشير إلى أن خطوة التنسيق تقدم العديد من موفري المطالبات للمستخدم لتحديد واحد.
  • CombinedSignInAndSignUp - يشير إلى أن خطوة التنسيق تقدم مشتركًا لتسجيل الدخول إلى الموفر الاجتماعي وصفحة الاشتراك في الحساب المحلي.
  • ClaimsExchange - للإشارة إلى أن خطوة التنسيق تتبادل المطالبات مع مزود المطالبات.
  • GetClaims - يحدِّد أن خطوة التزامن يجب أن تعالج بيانات المطالبة المُرسلة إلى Azure AD B2C من الجهة المعتمدة عبر تكوين InputClaims بها.
  • InvokeSubJourney - يشير إلى أن خطوة التزامن تتبادل المطالبات برحلة فرعية.
  • SendClaims - للإشارة إلى أن خطوة التزامن ترسل المطالبات إلى الطرف المعتمد برمز مميز صادر عن جهة إصدار المطالبات.
ContentDefinitionReferenceId لا معرّف تعريف المحتوى المرتبط بخطوة التنسيق هذه. عادةً ما يتم تعريف المعرف المرجعي لتعريف المحتوى في الملف الفني الذاتي المؤكد. ولكن، هناك بعض الحالات التي يحتاج فيها Azure AD B2C إلى عرض شيء ما دون ملف تعريف تقني. هناك مثالان - إذا كان نوع خطوة التنسيق واحداً مما يلي: ClaimsProviderSelection أو CombinedSignInAndSignUp، يحتاج Microsoft Azure AD B2C إلى عرض تحديد موفر الهوية دون وجود ملف تعريف تقني.
CpimIssuerTechnicalProfileReferenceId لا نوع خطوة التزامن هو SendClaims. تحدد هذه الخاصية معرّف الملف الشخصي الفني لموفر المطالبات الذي يصدر الرمز المميز للطرف المعتمد. في حالة الغياب، لا يتم إنشاء رمز مميز لطرف الاعتماد.

يمكن أن يحتوي العنصر OrchestrationStep على العناصر التالية:

العنصر الأحداث ‏‏الوصف
الشروط المسبقة: 0:n قائمة بالشروط المسبقة التي يجب استيفائها لخطوة التنسيق المراد تنفيذها.
ClaimsProviderSelections 0:n قائمة بتحديدات موفر المطالبات لخطوة التزامن.
ClaimsExchanges 0:n قائمة بتبادل المطالبات لخطوة التنسيق.
JourneyList 0:1 قائمة بمرشحي الرحلة الفرعية لخطوة التنسيق.

الشروط المسبقة:

يمكن تنفيذ خطوات التنظيم بشكل مشروط بناءً على الشروط المسبقة المحددة في خطوة التزامن. يحتوي العنصر Preconditions على قائمة الشروط المسبقة لتقييم. عندما يتم استيفاء تقييم الشرط المسبق، تنتقل خطوة التنسيق المرتبطة إلى خطوة التنسيق التالية.

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

يحتوي العنصر Preconditions على العنصر التالي:

العنصر الأحداث ‏‏الوصف
الشرط المسبق 1:n شرط مسبق للتقييم.

الشرط المسبق

يحتوي العنصر Precondition على السمات التالية:

السمة المطلوب الوصف
Type ‏‏نعم‬ نوع الفحص أو الاستعلام الذي يجب تنفيذه لهذا الشرط المسبق. يمكن أن تكون القيمة ClaimsExist، والتي تحدد أنه يجب تنفيذ الإجراءات إذا كانت المطالبات المحددة موجودة في مجموعة المطالبات الحالية للمستخدم، أو ClaimEquals، والتي تحدد أنه يجب تنفيذ الإجراءات في حالة وجود المطالبة المحددة وقيمتها تساوي المحدد القيمة.
ExecuteActionsIf ‏‏نعم‬ يقرر كيف يتم اعتبار الشرط المسبق مستوفيًا. القيم الممكنة:، true أو false. إذا تم تعيين القيمة على true، فسيتم اعتبارها مستوفية عندما لا تتطابق المطالبة مع الشرط المسبق. إذا تم تعيين القيمة على false، فسيتم اعتبارها مستوفاه عندما لا تتطابق المطالبة مع الشرط المسبق.

عناصر Precondition تحتوي على العناصر التالية:

العنصر الأحداث ‏‏الوصف
القيمة‬ 1:2 معرف نوع المطالبة. تم تحديد المطالبة بالفعل في قسم مخطط المطالبات في ملف السياسة أو ملف السياسة الرئيسي. عندما يكون الشرط المسبق من النوع ClaimEquals، يحتوي العنصر الثاني Value على القيمة المراد فحصها.
الإجراء 1:1 الإجراء الذي يجب القيام به في حالة استيفاء تقييم الشرط المسبق. القيمة الممكنة: SkipThisOrchestrationStep. تخطي خطوة التزامن المقترنة إلى الخطوة التالية.

ويقيم كل شرط مسبق مطالبة واحدة. هناك نوعان من الشروط المسبقة:

  • ClaimsExist - تحدد أنه يجب تنفيذ الإجراءات إذا كانت المطالبات المحددة موجودة في حقيبة المطالبة الحالية للمستخدم.

  • ClaimEquals - تحدد أنه يجب تنفيذ الإجراءات في حالة وجود المطالبة المحددة، وقيمتها تساوي القيمة المحددة. يقوم الفحص بإجراء مقارنة ترتيبية حساسة لحالة الأحرف. عند التحقق من نوع المطالبة المنطقية، أو استخدم True، أو False.

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

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

<Preconditions>
  <!-- Skip this orchestration step if MfaPreference doesn't exist. -->
  <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
    <Value>MfaPreference</Value>
    <Action>SkipThisOrchestrationStep</Action>
  </Precondition>
  <!-- Skip this orchestration step if MfaPreference doesn't equal to Phone. -->
  <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
    <Value>MfaPreference</Value>
    <Value>Phone</Value>
    <Action>SkipThisOrchestrationStep</Action>
  </Precondition>
</Preconditions>

أمثلة الشروط المسبقة

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

<OrchestrationStep Order="2" Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
      <Value>objectId</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="FacebookExchange" TechnicalProfileReferenceId="Facebook-OAUTH" />
    <ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" />
  </ClaimsExchanges>
</OrchestrationStep>

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

<OrchestrationStep Order="3" Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
      <Value>authenticationSource</Value>
      <Value>localAccountAuthentication</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="AADUserReadUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId-NoError" />
  </ClaimsExchanges>
</OrchestrationStep>

يمكن أن تحقق الشروط المسبقة عدة شروط مسبقة. يتحقق المثال التالي من وجود "objectId" أو "email". إذا كان الشرط الأول صحيحًا، تنتقل الرحلة إلى خطوة التنسيق التالية.

<OrchestrationStep Order="4" Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
      <Value>objectId</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
    <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
      <Value>email</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="SelfAsserted-SocialEmail" TechnicalProfileReferenceId="SelfAsserted-SocialEmail" />
  </ClaimsExchanges>
</OrchestrationStep>

اختيار موفر المطالبات

يتيح تحديد موفر المطالبات للمستخدمين تحديد إجراء من قائمة الخيارات. يتكون اختيار موفر الهوية من خطوتين للتنسيق:

  1. Buttons - تبدأ بنوع ClaimsProviderSelection، أو CombinedSignInAndSignUp تحتوي على قائمة بالخيارات التي يمكن للمستخدم الاختيار من بينها. يتحكم ترتيب الخيارات داخل العنصر ClaimsProviderSelections في ترتيب الأزرار المقدمة للمستخدم.
  2. الإجراءات - متبوعة بنوع ClaimsExchange. يحتوي ClaimsExchange على قائمة الإجراءات. الإجراء هو إشارة إلى ملف تعريف فني، مثل OAuth2 أو OpenID Connect أو claims transformation أو self-asserted. عندما ينقر مستخدم على أحد الأزرار، يتم تنفيذ الإجراء المقابل.

يحتوي عنصر ClaimsProviderSelections على العنصر التالي:

العنصر الأحداث ‏‏الوصف
ClaimsProviderSelection 1:n يوفر قائمة بمقدمي المطالبات الذين يمكن تحديدهم.

يحتوي عنصر ClaimsProviderSelections على السمات التالية:

السمة المطلوب ‏‏الوصف
DisplayOption لا يتحكم في سلوك الحالة حيث يتوفر اختيار مقدم مطالبات واحد. القيم المحتملة: DoNotShowSingleProvider (افتراضي)، تتم إعادة توجيه المستخدم على الفور إلى موفر الهوية المتحد. أو يقدم ShowSingleProvider Azure AD B2C صفحة تسجيل الدخول مع تحديد موفر الهوية الفردي. لاستخدام هذه السمة، يجب أن يكون إصدار تعريف المحتوىurn:com:microsoft:aad:b2c:elements:contract:providerselection:1.0.0 وما فوق.

يحتوي عنصر ClaimsProviderSelection على السمات التالية:

السمة المطلوب ‏‏الوصف
TargetClaimsExchangeId لا مُعرّف تبادل المطالبات، والذي يتم تنفيذه في خطوة التنسيق التالية لاختيار مزود المطالبات. يجب تحديد هذه السمة أو السمة ValidationClaimsExchangeId، ولكن ليس كلاهما.
ValidationClaimsExchangeId لا مُعرّف تبادل المطالبات، والذي يتم تنفيذه في خطوة التنسيق الحالية للتحقق من صحة اختيار مزود المطالبات. يجب تحديد هذه السمة أو سمة TargetClaimsExchangeId، ولكن ليس كلاهما.

مثال تحديد موفر المطالبات

في خطوة التنسيق التالية، يمكن للمستخدم اختيار تسجيل الدخول باستخدام Facebook أو LinkedIn أو Twitter أو Google أو حساب محلي. إذا اختار المستخدم أحد موفري الهوية الاجتماعية ، فسيتم تنفيذ خطوة التنسيق الثانية مع تبادل المطالبة المحدد في السمة TargetClaimsExchangeId. تعيد خطوة التنسيق الثانية توجيه المستخدم إلى موفر الهوية الاجتماعية لإكمال عملية تسجيل الدخول. إذا اختار المستخدم تسجيل الدخول باستخدام الحساب المحلي، فسيظل Azure AD B2C على نفس خطوة التنسيق (نفس صفحة التسجيل أو صفحة تسجيل الدخول) ويتخطى خطوة التنسيق الثانية.

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    <ClaimsProviderSelection TargetClaimsExchangeId="FacebookExchange" />
    <ClaimsProviderSelection TargetClaimsExchangeId="LinkedInExchange" />
    <ClaimsProviderSelection TargetClaimsExchangeId="TwitterExchange" />
    <ClaimsProviderSelection TargetClaimsExchangeId="GoogleExchange" />
    <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
  </ClaimsProviderSelections>
  <ClaimsExchanges>
  <ClaimsExchange Id="LocalAccountSigninEmailExchange"
        TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
  </ClaimsExchanges>
</OrchestrationStep>


<OrchestrationStep Order="2" Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
      <Value>objectId</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="FacebookExchange" TechnicalProfileReferenceId="Facebook-OAUTH" />
    <ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" />
    <ClaimsExchange Id="GoogleExchange" TechnicalProfileReferenceId="Google-OAUTH" />
    <ClaimsExchange Id="LinkedInExchange" TechnicalProfileReferenceId="LinkedIn-OAUTH" />
    <ClaimsExchange Id="TwitterExchange" TechnicalProfileReferenceId="Twitter-OAUTH1" />
  </ClaimsExchanges>
</OrchestrationStep>

ClaimsExchanges

يحتوي عنصر ClaimsExchanges على العنصر التالي:

العنصر الأحداث ‏‏الوصف
ClaimsExchange 1:n اعتمادًا على ملف التعريف الفني المستخدم، إما يعيد توجيه العميل وفقًا لـ ClaimsProviderSelection الذي تم تحديده، أو يقوم بإجراء مكالمة خادم لتبادل المطالبات.

يحتوي عنصر ClaimsExchange على السمات التالية:

السمة المطلوب ‏‏الوصف
المعرّف ‏‏نعم‬ معرف لخطوة تبادل المطالبات. يُستخدم المعرف للإشارة إلى تبادل المطالبات من خطوة اختيار مزود المطالبات في النهج.
TechnicalProfileReferenceId ‏‏نعم‬ معرف ملف التعريف التقني الذي سيتم تنفيذه.

JourneyList

يحتوي العنصر JourneyList على العنصر التالي:

العنصر الأحداث ‏‏الوصف
Candidate 1:1 إشارة إلى رحلة فرعية يجب استدعاؤها.

Candidate

يحتوي العنصر Candidate على السمات التالية:

السمة المطلوب ‏‏الوصف
SubJourneyReferenceId ‏‏نعم‬ معرّف الرحلة الفرعية التي سيتم تنفيذها.