اكتب أول نهج مخصص ل Azure Active Directory B2C - مرحبًا بالعالم!
في التطبيق الخاص بك، يمكنك استخدام تدفقات المستخدم التي تمكن المستخدمين من التسجيل أو تسجيل الدخول أو إدارة ملف التعريف الخاص بهم. عندما لا تغطي تدفقات المستخدم جميع الاحتياجات الخاصة بعملك، يمكنك استخدام نهج مخصصة.
بينما يمكنك استخدام حزمة بداية النهج المخصصة مسبقة الصنع لكتابة نهج مخصصة، فمن المهم بالنسبة لك فهم كيفية إنشاء نهج مخصص. في هذه المقالة، ستتعلم كيفية إنشاء أول نهج مخصص من البداية.
المتطلبات الأساسية
إذا لم يكن لديك واحد بالفعل ، فأنشئ مستأجر Azure AD B2C مرتبطًا باشتراك Azure الخاص بك.
تسجيل تطبيق ويب، وتمكين تفعيل المنحة الضمنية لرمز المعرّف. بالنسبة إلى عنوان URI لإعادة التوجيه، استخدم https://jwt.ms.
يجب أن يكون لديك Visual Studio Code (VS Code) مثبتا على الكمبيوتر الخاص بك.
إشعار
هذه المقالة هي جزء من سلسلة دليل كيفية إنشاء وتشغيل النهج المخصصة الخاصة بك في Azure Active Directory B2C. نوصي ببدء تشغيل هذه السلسلة من المقالة الأولى.
الخطوة 1 - تكوين مفاتيح التوقيع والتشفير
إذا لم تكن قد فعلت ذلك بالفعل، فقم بإنشاء مفاتيح التشفير التالية. لأتمتة التنقل أدناه، تفضل بزيارة تطبيق إعداد IEF واتبع الإرشادات:
استخدم الخطوات الواردة في إضافة مفاتيح التوقيع والتشفير لتطبيقات إطار عمل تجربة الهوية لإنشاء مفتاح التوقيع.
استخدم الخطوات الواردة في إضافة مفاتيح التوقيع والتشفير لتطبيقات إطار عمل تجربة الهوية لإنشاء مفتاح التشفير.
الخطوة 2 - إنشاء ملف النهج المخصص
في VS Code، قم بإنشاء الملف
ContosoCustomPolicy.XML
وفتحه .في
ContosoCustomPolicy.XML
الملف، أضف التعليمات البرمجية التالية:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="yourtenant.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_ContosoCustomPolicy"> <BuildingBlocks> <!-- Building Blocks Here--> </BuildingBlocks> <ClaimsProviders> <!-- Claims Providers Here--> </ClaimsProviders> <UserJourneys> <!-- User Journeys Here--> </UserJourneys> <RelyingParty> <!-- Relying Party Here that's your policy’s entry point Specify the User Journey to execute Specify the claims to include in the token that is returned when the policy runs --> </RelyingParty> </TrustFrameworkPolicy>
استبدل
yourtenant
بجزء النطاق الفرعي من اسم المستأجر الخاص بك، مثلcontoso
. تعرف على كيفية الحصول على اسم المستأجر لديك.تحدد عناصر XML عنصر المستوى
TrustFrameworkPolicy
الأعلى لملف النهج بمعرف النهج واسم المستأجر الخاص به. يحتوي عنصر TrustFrameworkPolicy على عناصر XML أخرى ستستخدمها في هذه السلسلة.للإعلان عن مطالبة، أضف التعليمات البرمجية التالية في
BuildingBlocks
قسم منContosoCustomPolicy.XML
الملف:<ClaimsSchema> <ClaimType Id="objectId"> <DisplayName>unique object Id for subject of the claims being returned</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="message"> <DisplayName>Will hold Hello World message</DisplayName> <DataType>string</DataType> </ClaimType> </ClaimsSchema>
المطالبة مثل متغير. يظهر إعلان المطالبة أيضا نوع بيانات المطالبة.
في
ClaimsProviders
قسم منContosoCustomPolicy.XML
الملف، أضف التعليمات البرمجية التالية:<ClaimsProvider> <DisplayName>Token Issuer</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="JwtIssuer"> <DisplayName>JWT Issuer</DisplayName> <Protocol Name="None" /> <OutputTokenFormat>JWT</OutputTokenFormat> <Metadata> <Item Key="client_id">{service:te}</Item> <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item> <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item> </Metadata> <CryptographicKeys> <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" /> </CryptographicKeys> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <ClaimsProvider> <!-- The technical profile(s) defined in this section is required by the framework to be included in all custom policies. --> <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13"> <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName> <Protocol Name="None" /> <Metadata> <Item Key="url">{service:te}</Item> </Metadata> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
لقد أعلنا عن مصدر رمز JWT المميز. في
CryptographicKeys
القسم ، إذا استخدمت أسماء مختلفة لتكوين مفاتيح التوقيع والتشفير في الخطوة 1، فتأكد من استخدام القيمة الصحيحة لStorageReferenceId
.في
UserJourneys
قسم منContosoCustomPolicy.XML
الملف، أضف التعليمات البرمجية التالية:<UserJourney Id="HelloWorldJourney"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
لقد أضفنا UserJourney. تحدد رحلة المستخدم منطق العمل الذي يمر به المستخدم النهائي أثناء معالجة Azure AD B2C لطلب. تحتوي رحلة المستخدم هذه على خطوة واحدة فقط تصدر رمز JTW المميز مع المطالبات التي ستحددها في الخطوة التالية.
في
RelyingParty
قسم منContosoCustomPolicy.XML
الملف، أضف التعليمات البرمجية التالية:<DefaultUserJourney ReferenceId="HelloWorldJourney"/> <TechnicalProfile Id="HelloWorldPolicyProfile"> <DisplayName>Hello World Policy Profile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/> <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile>
قسم RelyingParty هو نقطة الإدخال إلى النهج الخاص بك. يحدد UserJourney لتنفيذ والمطالبات المراد تضمينها في الرمز المميز الذي يتم إرجاعه عند تشغيل النهج.
بعد إكمال الخطوة 2، ContosoCustomPolicy.XML
يجب أن يبدو الملف مشابها للتعليمات البرمجية التالية:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="Contosob2c2233.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://Contosob2c2233.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
<BuildingBlocks>
<ClaimsSchema>
<ClaimType Id="objectId">
<DisplayName>unique object Id for subject of the claims being returned</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="message">
<DisplayName>Will hold Hello World message</DisplayName>
<DataType>string</DataType>
</ClaimType>
</ClaimsSchema>
</BuildingBlocks>
<ClaimsProviders><!--Claims Providers Here-->
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="JwtIssuer">
<DisplayName>JWT Issuer</DisplayName>
<Protocol Name="None"/>
<OutputTokenFormat>JWT</OutputTokenFormat>
<Metadata>
<Item Key="client_id">{service:te}</Item>
<Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
<Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
</Metadata>
<CryptographicKeys>
<Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer"/>
<Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer"/>
</CryptographicKeys>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<ClaimsProvider>
<DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
<DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
<Protocol Name="None" />
<Metadata>
<Item Key="url">{service:te}</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
<UserJourneys>
<UserJourney Id="HelloWorldJourney">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
</UserJourney>
</UserJourneys>
<RelyingParty><!--
Relying Party Here that's your policy’s entry point
Specify the User Journey to execute
Specify the claims to include in the token that is returned when the policy runs
-->
<DefaultUserJourney ReferenceId="HelloWorldJourney"/>
<TechnicalProfile Id="HelloWorldPolicyProfile">
<DisplayName>Hello World Policy Profile</DisplayName>
<Protocol Name="OpenIdConnect"/>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
<OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
</OutputClaims>
<SubjectNamingInfo ClaimType="sub"/>
</TechnicalProfile>
</RelyingParty>
</TrustFrameworkPolicy>
الخطوة 3 - تحميل ملف نهج مخصص
- سجل الدخول إلى مدخل Azure.
- إذا كان لديك حق الوصول إلى عدة مستأجرين، فحدد رمز الإعدادات في القائمة العلوية للتبديل إلى مستأجر Azure AD B2C من قائمة Directories + subscriptions.
- في مدخل Microsoft Azure، ابحث عن Azure AD B2C وحددها.
- في القائمة اليسرى، ضمن Policies، حدد Identity Experience Framework.
- حدد تحميل نهج مخصص، واستعرض تحديد ثم قم بتحميل
ContosoCustomPolicy.XML
الملف.
بعد تحميل الملف، يضيف Azure AD B2C البادئة B2C_1A_
، بحيث تبدو الأسماء مشابهة B2C_1A_CONTOSOCUSTOMPOLICY.
الخطوة 4 - اختبار النهج المخصص
- ضمن نهج مخصصة، حدد B2C_1A_CONTOSOCUSTOMPOLICY.
- بالنسبة إلى Select application في صفحة النظرة العامة للنهج المخصص، حدد تطبيق الويب مثل webapp1 الذي قمت بتسجيله مسبقا. تأكد من تعيين قيمة تحديد عنوان URL للرد إلى
https://jwt.ms
. - حدد الزر تشغيل الآن .
بعد انتهاء النهج من التنفيذ، تتم إعادة توجيهك إلى https://jwt.ms
، وترى رمز JWT المميز الذي تم فك ترميزه. يبدو مشابها لمقتطف الرمز المميز JWT التالي:
{
"typ": "JWT",
"alg": "RS256",
"kid": "pxLOMWFg...."
}.{
...
"sub": "abcd-1234-efgh-5678-ijkl-etc.",
...
"acr": "b2c_1a_contosocustompolicy",
...
"message": "Hello World!"
}.[Signature]
message
لاحظ المطالبات وsub
، التي قمنا بتعيينها كمطالبات إخراج في RelyingParty
القسم .
الخطوات التالية
في هذه المقالة، تعلمت أربعة أقسام مضمنة في نهج Azure AD B2C المخصص واستخدمتها. تتم إضافة هذه الأقسام كعناصر تابعة للعنصر TrustFrameworkPolicy
الجذر:
- BuildingBlocks
- ClaimsProviders
- UserJourneys
- RelyingParty
بعد ذلك، تعرف على:
كيفية جمع مدخلات المستخدم واستخدامها باستخدام نهج مخصص.
حول نظرة عامة على مطالبات النهج المخصصة.
كيفية الإعلان عن مطالبة نهج مخصصة.
حول نوع بيانات مطالبات النهج المخصصة.
حول أنواع إدخال مستخدم النهج المخصصة.
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ