المصادقة عبر OpenID Connect
يوفر OpenID Connect (OIDC) للمؤسسات طريقة حديثة وآمنة لمصادقة المستخدمين مع تبسيط الوصول إلى تطبيقات Windows المستضافة على GO-Global. من خلال التكامل مع مزودي الهوية مثل Okta أو Azure AD أو ADFS، يمكن للمسؤولين توحيد عملية المصادقة وتحسين تجربة تسجيل دخول المستخدمين — سواء كان المستخدمون يسجلون الدخول باستخدام حسابات Windows المحلية أو حسابات المجال أو كليهما. يشرح هذا الدليل كيفية تمكين مصادقة OIDC في GO-Global، وتكوين عمليات تسجيل الدخول التلقائية إلى Windows، ومطابقة حسابات مزودي الهوية مع مستخدمي Active Directory، وإدارة الإعدادات الإضافية المطلوبة للوصول السلس. كما يغطي الخيارات المتقدمة مثل تخصيص حقول اسم المستخدم، ومعالجة إنشاء الحسابات المحلية، وتكوين الأذونات، واسترداد رموز OIDC برمجياً.
بعد قيام المستخدم بالمصادقة عبر OIDC، يوفر GO-Global للمسؤولين عدة خيارات لمصادقة المستخدم تلقائيًا على نظام Windows. على سبيل المثال، إذا كان مزود الهوية مدمجًا مع Active Directory الخاص بالمؤسسة، فيمكن لـ GO-Global تسجيل دخول المستخدم تلقائيًا إلى حساب المجال الخاص به. أو بدلاً من ذلك، إذا لم يكن تكامل Active Directory مطلوبًا أو مرغوبًا فيه، فيمكن لـ GO-Global إنشاء حساب Windows محلي للمستخدم وتسجيل دخوله تلقائيًا إلى ذلك الحساب. يعد دعم تسجيل الدخول الأحادي خيارًا إضافيًا. ستكون مصادقة OpenID Connect غير نشطة (معطلة) ما لم يتم شراء الميزة.
لتفعيل مصادقة OpenID Connect
- انقر فوق أدوات | خيارات المضيف.
- انقر فوق علامة التبويب «المصادقة ».
- تمكين مصادقة OpenID Connect.
- اختر أحد الخيارين التاليين أو لا تختر أيًا منهما:
- تسجيل دخول المستخدمين تلقائيًا إلى حسابات Windows المحلية. عند تمكين هذه الميزة، سيقوم GO-Global تلقائيًا بإنشاء حساب مستخدم محلي للمستخدمين الذين لا يمتلكون حسابًا في المجال.
- تسجيل دخول المستخدمين تلقائيًا إلى حساباتهم في المجال. عند تمكين هذه الميزة، يحاول GO-Global إجراء تسجيل دخول S4U باستخدام اسم المستخدم الموحد (UPN) الخاص بالمستخدم، والذي يحصل عليه من مزود الهوية OIDC بعد نجاح عملية تسجيل الدخول عبر OpenID Connect. وبحد ذاته، سيمكّن تسجيل الدخول S4U المستخدمين من الوصول إلى الموارد الموجودة على مضيف GO-Global، لكن لن يتمكن المستخدمون من المصادقة على الخدمات التي تعمل على الشبكة. وللوصول إلى الخدمات التي تعمل على الشبكة، يجب على المسؤولين إما تمكين التفويض المقيد (كما هو موضح في متطلبات التكوين لدعم التفويض (مقال) أو تمكين خيار تخزين كلمات المرور مؤقتًا على المضيف.
- إذا كان بإمكان أحد التطبيقات التي يستضيفها GO-Global العمل تحت حساب محلي على مضيف GO-Global، فيجب تحديد الخيار «تسجيل دخول المستخدمين تلقائيًا إلى حسابات Windows المحلية». أما إذا كان التطبيق يتطلب الوصول إلى موارد تديرها Active Directory، فيجب تحديد الخيار «تسجيل دخول المستخدمين تلقائيًا إلى حسابات المجال الخاصة بهم». وفي هذه الحالة الأخيرة، يجب أن يكون مزود الهوية مدمجًا مع Active Directory حتى يتمكن من تزويد GO-Global باسم المستخدم الموحد (UPN) الخاص بالمستخدم.
- إذا لم يتم تحديد خيار «تسجيل دخول المستخدمين تلقائيًا إلى حسابات Windows المحلية » ولا خيار «تسجيل دخول المستخدمين تلقائيًا إلى حسابات المجال الخاصة بهم »، فسيُطلب من المستخدمين تسجيل الدخول إلى Windows وفقًا لما تحدده الخيارات الأخرى في علامة التبويب «المصادقة». على سبيل المثال، إذا تم تمكين كل من مصادقة OpenID Connect والمصادقة القياسية ، فسيُطلب من المستخدمين تسجيل الدخول مرتين. أولاً، سيُطلب منهم تسجيل الدخول إلى موفر الهوية OpenID Connect. ثم بعد المصادقة بنجاح مع موفر الهوية OpenID Connect، سيُطلب منهم إدخال اسم المستخدم وكلمة المرور لحساب Windows.
- إذا كان بإمكان أحد التطبيقات التي يستضيفها GO-Global العمل تحت حساب محلي على مضيف GO-Global، فيجب تحديد الخيار «تسجيل دخول المستخدمين تلقائيًا إلى حسابات Windows المحلية». أما إذا كان التطبيق يتطلب الوصول إلى موارد تديرها Active Directory، فيجب تحديد الخيار «تسجيل دخول المستخدمين تلقائيًا إلى حسابات المجال الخاصة بهم». وفي هذه الحالة الأخيرة، يجب أن يكون مزود الهوية مدمجًا مع Active Directory حتى يتمكن من تزويد GO-Global باسم المستخدم الموحد (UPN) الخاص بالمستخدم.
- أدخل سلسلة معرف العميل الموجودة في إعدادات خادم OpenID Connect في مربع "معرف العميل ".
- اكتب سلسلة "Client Secret" الموجودة في إعدادات خادم OpenID Connect في المربع "Client Secret ".
- أدخل عنوان URL الخاص بالتفويض المستخدم لمصادقة المستخدمين مع خادم OpenID Connect الخاص بك في مربع " عنوان URL الخاص بالتفويض ".
- أدخل عنوان URL الخاص بالرمز المستخدم لمصادقة المستخدمين عبر خادم OpenID Connect الخاص بك في مربع " عنوان URL للرمز ".
- في مربع " عنوان URL لإعادة التوجيه "، اكتب عنوان URL الذي يجب أن يستخدمه مزود الهوية لإعادة توجيه المستخدمين إلى مضيف GO-Global بعد إتمام عملية المصادقة بنجاح. يجب أن يكون هذا هو نفس عنوان URL الأساسي الذي يستخدمه المستخدمون للوصول إلى مضيف GO-Global مع إضافة callback.html في نهايته. على سبيل المثال، إذا كنت تستخدم خادم ويب منفصل مثل IIS ولم يتم تمكين TLS، فسيكون عنوان URL للرد http://hostname/goglobal/callback.html. أو بدلاً من ذلك، إذا كنت تستخدم خادم الويب المدمج في GO-Global ولم يتم تمكين TLS وتم تكوين GO-Global لقبول الاتصالات على المنفذ الافتراضي، 491، فسيكون عنوان URL للرد http://hostname:491/callback.html.
- انقر فوق " موافق".
ربط مستخدمي Active Directory بحسابات مزود الهوية
يوفر GO-Global عدة خيارات لاستخلاص اسم المستخدم الموحد (UPN) من المطالبات الموجودة في رمز هوية OIDC. يجب أن تتطابق حسابات المستخدمين بإحدى الطرق الثلاث التالية في كل من Active Directory (AD) ومزود الهوية.
هناك ثلاث طرق لتحقيق ذلك:
- يتطابق اسم المستخدم الأساسي (UPN) الأصلي للمستخدم بالفعل مع ، وهو اسم المستخدم الخاص بمزود الهوية. على سبيل المثال، نطاق AD المحلي هو example.com ونطاق مزود الهوية هو أيضًا example.com. بشكل افتراضي، يبحث GO-Global عن اسم مستخدم أساسي (UPN) صالح في حقول البريد الإلكتروني وUPN وsub وuserid في رمز الهوية (ID token)، بهذا الترتيب. بدلاً من ذلك، يمكن للمسؤولين تحديد المطالبة التي تحتوي على UPN عبر خاصية OpenIDConnectUserNameField في HostProperties.xml.
- أضف لاحقة UPN واستخدمها في أسماء مستخدمي AD بحيث تتطابق UPN في AD مع UPN في مزود الهوية. على سبيل المثال، نطاق AD المحلي هو company.local، لكن أضف لاحقة UPN للمستخدمين تسمى example.com. كما أن نطاق مزود الهوية هو example.com أيضًا.
- اضبط سمة البريد في AD الخاصة بالمستخدم بحيث تتطابق مع UPN لمزود الهوية، وقم بتعديل أحد الإعدادات في ملف HostProperties.xml. في بعض عمليات النشر، لا توجد مطالبة في رمز الهوية تتطابق مع UPN المستخدم في AD. على سبيل المثال، في بيئة استضافة حيث يتم استخدام مزود هوية العميل، لن يتطابق نطاق العميل (مثل customercompany.com) مع نطاق AD لبيئة الاستضافة (مثل hostedapp.com). ونظرًا لاستخدام مزود هوية العميل، لن يتمكن مسؤولو بيئة الاستضافة من إضافة مطالبة إلى رموز معرف OIDC الخاصة بالمستخدمين تحدد UPN AD.
في حالات مثل هذه، يمكن للمسؤولين تكوين GO-Global للبحث عن AD UPN الخاص بالمستخدم عبر عنوان البريد الإلكتروني الخاص به. ويتحقق ذلك عن طريق تعيين قيمة الخاصية OpenIDConnectUserLookupByEmail في HostProperties.xml إلى true على جميع المضيفات ذات الصلة. وعندما يتم تعيين هذه الخاصية إلى true، يبحث GO-Global في Active Directory عن حساب مستخدم به سمة بريد إلكتروني تتطابق مع مطالبة البريد الإلكتروني لرمز تعريف OIDC.
تخزين أسماء المستخدمين في حقول بديلة
بشكل افتراضي، يحصل GO-Global على اسم مستخدم Windows من " اسم المستخدم الرئيسي" (User Principal Name ) أو عنوان البريد الإلكتروني المحدد من قِبل مزود الهوية في رمز تعريف OpenID Connect الخاص بالمستخدم. ومع ذلك، إذا تم تكوين مزود الهوية لتخزين اسم مستخدم Windows الخاص بالمستخدم في حقل بديل، فيمكن للمسؤولين تكوين GO-Global لاستخدام الحقل البديل عن طريق إدخال اسم الحقل في الخاصية OpenIDConnectUserNameField في ملف HostProperties.xml.
لتعيين الخاصية OpenIDConnectUserNameField
- أوقف خدمة نشر التطبيقات.
- افتح ملف %PROGRAMDATA%\GraphOn\GO-Global\HostProperties.xml في محرر نصوص.
- ابحث عن الخاصية OpenIDConnectUserNameField وقم بتغيير قيمتها إلى اسم المطالبة الموجودة في رمز OpenID Connect الخاص بالمستخدم، والتي تحتوي على اسم المستخدم الرئيسي (User Principal Name) الذي يجب أن تستخدمه GO-Global لمصادقة المستخدم على نظام Windows.
- احفظ ملف HostProperties.xml.
- أعد تشغيل خدمة نشر التطبيقات.
عند تمكين خيار " تسجيل دخول المستخدمين تلقائيًا إلى حسابات Windows المحلية "، يتم تكوين أسماء حسابات المستخدمين المحلية استنادًا إلى "اسم المستخدم الرئيسي" (User Principal Name) أو عنوان البريد الإلكتروني الذي يتم الحصول عليه من عملية مصادقة OpenID Connect. ونظرًا لأن الحسابات المحلية لا يمكن أن تحتوي على الرموز "@" أو "."، يتم استبدالهما بالرمزين "_" و"-" على التوالي. على سبيل المثال، سيتم تكوين عنوان البريد الإلكتروني sales@graphon.com ليصبح sales_graphon-com.
ملاحظة: يحدد نظام Windows عدد الأحرف في أسماء الحسابات المحلية بـ 20 حرفًا. إذا كان اسم الحساب المركب أطول من 20 حرفًا، يقوم GO-Global باختصار الاسم إلى 20 حرفًا
تتكون كلمات المرور لهذه الحسابات من أحرف يتم اختيارها عشوائياً من الأحرف الأبجدية الصغيرة، والأحرف الأبجدية الكبيرة، والأرقام، والأحرف الخاصة !@#$%& . سيكون طول كلمة المرور التي ينشئها برنامج GO-Global مساوياً للحد الأدنى لطول كلمة المرور المحدد للمستخدمين على الكمبيوتر، ما لم يكن الحد الأدنى أقل من 7 أحرف. وفي هذه الحالة، سيقوم برنامج GO-Global بإنشاء كلمة مرور أطول بـ 14 حرفاً من الحد الأدنى المطلوب. على سبيل المثال، إذا كان الحد الأدنى لطول كلمة المرور على الكمبيوتر هو 6، فسيقوم GO-Global بإنشاء كلمة مرور بطول 20 حرفًا، بالصيغة التالية: 8tw@m4b9Dek#vR76@t6%. إذا لم يتمكن GO-Global من الحصول على الحد الأدنى لطول كلمة المرور على الكمبيوتر، فسيقوم بإنشاء كلمة مرور بطول 14 حرفًا.
إذا تم تعيين متطلبات الحد الأدنى للطول عبر "نظام القواعد الجماعية" (Group Policy)، فقم بتمكين "نظام القواعد الجماعية" في علامة التبويب "بدء الجلسة" (Session Startup) في مربع الحوار "خيارات المضيف" (Host Options). لا يتم حفظ كلمات المرور هذه أو إعادة استخدامها. يتم تغيير كلمة المرور مع كل مصادقة OpenID Connect.
لا تتم إدارة أذونات تطبيقات Windows المستضافة في جلسات GO-Global بواسطة مزودي الهوية مثل Okta أو ADFS. بل تتم إدارتها في Windows أو Active Directory.
يعد التكامل مع Active Directory إحدى وظائف مزود الهوية. يتم دمج خدمات Active Directory Federated Services (ADFS) تلقائيًا مع Active Directory. يوفر مزودو الهوية الآخرون عمليات الدمج الخاصة بهم. ستكون المؤسسات التي تستخدم مزود هوية قد قامت بالفعل بتكوين هذا. ستحتاج المؤسسات التي تقوم بإعداد هذا للتو إلى الرجوع إلى وثائق مزود الهوية الخاص بها لمعرفة كيفية إعداد هذا.
لمزيد من المعلومات حول Okta، تفضل بزيارة: https://help.okta.com/en/prod/Content/Topics/Directory/ad-agent-main.htm.
عند استخدام Azure، تأكد من استخدام عناوين URL لنقطة نهاية تفويض OAuth 2.0 (v1) ونقطة نهاية رمز OAuth 2.0 (v1). لن تعمل عناوين URL لنقطة النهاية v2.
عند استخدام ADFS، حدد "تطبيق الخادم" عند إنشاء تطبيق OIDC.
منح حقوق تشغيل وتفعيل COM للمستخدمين العاديين
بشكل افتراضي، لا يمنح نظام Windows المستخدمين العاديين الذين لم يسجلوا دخولهم إلى النظام تفاعليًّا عن طريق إدخال اسم المستخدم وكلمة المرور الحق في تشغيل كائنات COM وتفعيلها. ونتيجة لذلك، قد لا تعمل التطبيقات التي تعتمد على واجهات COM، مثل مستكشف ملفات Windows، بشكل صحيح إلا للمستخدمين الأعضاء في مجموعة "المسؤولين" عند استخدام مصادقة OpenID Connect. ولذلك، عند تمكين مصادقة OIDC، قم بمنح المستخدمين العاديين حقوق تشغيل وتفعيل كائنات COM على النحو التالي:
- قم بتشغيل dcomcnfg.
- انتقل إلى "خدمات المكونات" | "أجهزة الكمبيوتر" | "جهاز الكمبيوتر".
- انقر بزر الماوس الأيمن فوق «جهاز الكمبيوتر » ثم انقر فوق «خصائص».
- حدد علامة التبويب «أمان COM ».
- ضمن "أذونات التشغيل والتفعيل"، انقر فوق الزر "تحرير الإعدادات الافتراضية... ".
- انقر على زر «إضافة ». (ملاحظة: تمنح الأذونات الافتراضية حقوقًا كاملة لمجموعتي INTERACTIVE و Administrators. ولهذا السبب يعمل هذا مع جميع المستخدمين الذين تمت مصادقتهم عبر اسم المستخدم وكلمة المرور (مستخدمو INTERACTIVE) وأعضاء مجموعة Administrators عند استخدام OIDC.
- أضف مجموعة مستخدمي المجال.
- انقر فوق مربعات الاختيار "السماح " الموجودة بجوار " التشغيل المحلي " و" التنشيط المحلي".
- انقر فوق " موافق".
- انقر فوق " موافق".
استرداد رمز تعريف OIDC ورمز الوصول برمجياً
في بعض الأحيان، يكون من المفيد للتطبيقات التي تعمل في جلسة GO-Global أن تتمكن من استرداد المطالبات الموجودة ضمن رمز الهوية OIDC و/أو رمز الوصول الذي يوفره مزود الهوية عند مصادقة المستخدم. وعندما يكون ذلك مطلوبًا، يمكن لمطوري التطبيقات إضافة تعليمات برمجية إلى تطبيقاتهم لاسترداد هذه الرموز.
يتطلب استرداد رمز تعريف OIDC ورمز الوصول برمجياً أن يقوم الكود بما يلي:
- الحصول على معرف (HANDLE) لملف redirector.dll من خلال استدعاء الدالة GetModuleHandle()
- الحصول على عنوان الإجراء الخاص بوظيفتين تم تصديرهما باستخدام استدعاءات لـ GetProcAddress() لكل من "GetOpenIDConnectIDToken" و"GetOpenIDConnectAccessToken"
- استدعِ عنوانَي الإجراء هذين مع المعلمتين 0 و NULL للحصول على طول المخزن المؤقت من نوع char المطلوب
- تخصيص مخزن الأحرف
- استدعِ هاتين الدالتين مرة أخرى للحصول على الرموز الفعلية
مثال على الكود:
/**
* File: GetOidcIdAndAccessTokens.cpp
*
* Copyright 2025 by GraphOn Corporation
* All rights reserved.
*
* This software is the confidential and proprietary information
* of GraphOn Corporation ("Confidential Information"). You
* shall not disclose such Confidential Information and shall use
* it only in accordance with the terms of the license agreement
* you entered into with GraphOn.
*/
#include <Windows.h>
#include <stdio.h>
int main()
{
printf ("GetOidcIdAndAccessTokens\n");
HMODULE hRedirector = ::GetModuleHandleA ("redirector.dll");
if (hRedirector)
{
typedef unsigned int (WINAPI* fnGetOpenIDConnectToken)(unsigned int, char*);
fnGetOpenIDConnectToken pfnGetOpenIDConnectIDToken = (fnGetOpenIDConnectToken)::GetProcAddress (hRedirector, "GetOpenIDConnectIDToken");
if (pfnGetOpenIDConnectIDToken)
{
unsigned int length = pfnGetOpenIDConnectIDToken (0, NULL);
if (length)
{
printf ("GetOpenIDConnectIDToken(1) returned OIDC ID token length %d.\n", length);
char* oidcCustomClaims = NULL;
try { oidcCustomClaims = new char[length]; }
catch (...) {}
if (oidcCustomClaims)
{
length = pfnGetOpenIDConnectIDToken (length, oidcCustomClaims);
if (length)
{
printf ("GetOpenIDConnectIDToken(2) returned OIDC ID token length %d.\n", length);
printf ("GetOpenIDConnectIDToken(2) returned OIDC ID token %hs.\n", oidcCustomClaims);
}
else
printf ("ERROR GetOpenIDConnectIDToken(2) returned OIDC ID token length %d\n", length);
}
else
printf ("ERROR Failed to allocate ID token string length %d\n", length);
}
else
printf ("ERROR GetOpenIDConnectIDToken(1) returned OIDC ID token length %d\n", length);
}
else
printf ("ERROR ::GetProcAddress (hRedirector, \"GetOpenIDConnectIDToken\") failed!\n");
fnGetOpenIDConnectToken pfnGetOpenIDConnectAccessToken = (fnGetOpenIDConnectToken)::GetProcAddress (hRedirector, "GetOpenIDConnectAccessToken");
if (pfnGetOpenIDConnectAccessToken)
{
unsigned int length = pfnGetOpenIDConnectAccessToken (0, NULL);
if (length)
{
printf ("GetOpenIDConnectAccessToken(1) returned OIDC access token length %d.\n", length);
char* oidcCustomClaims = NULL;
try { oidcCustomClaims = new char[length]; }
catch (...) {}
if (oidcCustomClaims)
{
length = pfnGetOpenIDConnectAccessToken (length, oidcCustomClaims);
if (length)
{
printf ("GetOpenIDConnectAccessToken(2) returned OIDC access token length %d.\n", length);
printf ("GetOpenIDConnectAccessToken(2) returned OIDC access token %hs.\n", oidcCustomClaims);
}
else
printf ("ERROR GetOpenIDConnectAccessToken(2) returned OIDC access token length %d\n", length);
}
else
printf ("ERROR Failed to allocate access token string length %d\n", length);
}
else
printf ("ERROR GetOpenIDConnectAccessToken(1) returned OIDC access token length %d\n", length);
}
else
printf ("ERROR ::GetProcAddress (hRedirector, \"GetOpenIDConnectAccessToken\") failed!\n");
}
else
printf ("ERROR ::GetModuleHandle (\"redirector.dll\") failed!\n");
printf ("\nPress Enter to exit.\n");
::getchar ();
}
لتشغيل تطبيقات اختبار GetOidcIdAndAccessTokens
- قم بتنزيل ملف GetOidcIdAndAccessTokens.zip منالرابط https://cdn.graphon.com/portal_resources/Downloads/GetOidcIdAndAccessTokens.zip وفك ضغطه على خادم GO-Global الذي تم تمكين مصادقة OpenID Connect عليه.
- قم بتسجيل تطبيقي الاختبار GetOidcIdAndAccessTokens_32bit.exe و GetOidcIdAndAccessTokens_64bit.exe لدى GO-Global.
- ابدأ جلسة GO-Global.
- قم بتشغيل تطبيقات الاختبار في جلسة GO-Global. يتم عرض رمز الهوية (ID Token) ورمز الوصول (Access Token) الخاصين بـ OpenID Connect في نافذة وحدة التحكم.
استنتاج
يوفر تطبيق مصادقة OpenID Connect في GO-Global للمسؤولين أدوات فعالة لتوحيد إدارة الهوية، وتقليل الصعوبات التي يواجهها المستخدمون، وتعزيز الأمان عبر التطبيقات المستضافة. من خلال اختيار سير عمل تسجيل الدخول المناسب، وضمان توافق مطالبات OIDC مع Active Directory، وتطبيق أذونات Windows المطلوبة، يمكن للمؤسسات إنشاء تجربة مصادقة سلسة لكل من البيئات المحلية والبيئات القائمة على المجال. وبفضل القدرة على تخصيص معالجة اسم المستخدم والوصول إلى رموز OIDC برمجياً، يدعم GO-Global أيضاً احتياجات التطبيقات الأكثر تقدماً. تمنح هذه القدرات مجتمعةً المسؤولين المرونة اللازمة لدمج حلول الهوية الحديثة مع الحفاظ على التوافق التام مع متطلبات مصادقة Windows.
هل أنت من بائعي البرمجيات المستقلين الذين يستكشفون تقديم التطبيقات المستندة إلى السحابة؟ اتصل بنا لمعرفة كيف يمكن ل GO-Global مساعدتك في تبسيط وصول المستخدمين النهائيين إلى البرامج. أو قم بتنزيل نسخة تجريبية مجانية لاختبارها بنفسك.

