بروتوكولات الثقة في Taming - مصادقة OAuth مع InterSystems IRIS

كيفية السماح لأجهزة الكمبيوتر أن تثق في بعضها البعض في غيابك ، مع الحفاظ على الأمن والخصوصية؟



- جاف مارتيني. في كوب كبير.
- عوي ، المونسنيور. [نعم ، السيد (الأب)]
"مجرد ثانية ، وليس كل شيء." ثلاثة أصابع من جوردون ، واحدة من الفودكا ، إصبع نصف كينا ليكيت. فاز جيداً في شاكر ، ثم ضع شريحة كبيرة من الليمون. هل تتذكر؟

يان فليمنج ، كازينو رويال ، 1953

الجزء 1. OAuth 2.0 و OpenID Connect Stories


عالميًا ، كما يبدو ، في القرن الحادي والعشرين ، تُسمى الحزمة المفضلة لكل من بروتوكولات التفويض والتوثيق للوصول المفتوح OAuth + OIDC. أفضل للاستخدام الشامل ، لم يأتوا بشيء بعد. إنها شائعة بشكل خاص لدى البائعين المتقدمين لأنهم يمشون فوق بروتوكولات HTTP (S) ويستخدمون حاوية JWT ( JSON Web Token ). يستخدم OpenID Connect OAuth لعمله ، أو بمعنى آخر ، OIDC عبارة عن غلاف لبرنامج OAuth.

OpenID - معيار مفتوح للمصادقة وإنشاء أنظمة التعرف الرقمي ليست جديدة للمطورين. هذا العام ، يبلغ من العمر 14 عامًا. في الإصدار الثالث الحالي ، الاسم الكامل هو OpenID Connect أو أقصر من OIDC. أنها تحظى بشعبية في كل من الويب وتطوير المحمول ، وفي أنظمة الشركات.

يبلغ عمر شريكه ، OAuth Open Access وفد Standard ، 12 عامًا. وبعد مرور 9 سنوات على ظهور معيار RFC 5849 ، سنعتمد على الإصدار الحديث من بروتوكول OAuth 2.0 و RFC 6749 الحالي. تذكر أن OAuth 2.0 غير متوافق مع سابقه OAuth 1.0.
OAuth هو بروتوكول مفتوح (مخطط ، نقل) لتفويض الوصول ، والذي يسمح بتزويد طرف ثالث بوصول محدود إلى الموارد المحمية للمستخدم دون الحاجة إلى نقل تسجيل الدخول وكلمة المرور لـ RFC 6749 إليه (طرف ثالث)

oauth.net هو موقع OAuth الرائد الذي تستضيفه آرون باريكي

oauth.com - برنامج OAuth التعليمي وبيئة الاختبار

Open ID Connect (OIDC) هو معيار مفتوح لأنظمة التعريف اللامركزية التي تسمح للمستخدم بإنشاء حساب واحد للتعريف على مجموعة متنوعة من موارد الإنترنت غير ذات الصلة باستخدام خدمات الطرف الثالث ، ويستخدم رسائل OAuth وحاوية JWT للاتصال الآمن.
بالمعنى الدقيق للكلمة ، OAuth ليس بروتوكولًا ، ولكنه مجموعة من القواعد (مخطط) لفصل عمليات تعريف المستخدم ونقلها إلى خادم موثوق موثوق به عند تطبيق هندسة تعيين التحكم في الوصول في أنظمة البرمجيات.

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


يتيح الاستخدام المشترك لـ OAuth + OIDC + UMA تطبيق أنظمة آمنة لتحديد الهوية والتحكم في الوصول (إدارة الهوية والوصول - IdM ، IAM) في مجالات مواضيع مختلفة ، على سبيل المثال:


Venn جديدة من التحكم في الوصول لاقتصاد API

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

الجزء 2. مسرحية قصيرة "الثقة والمصادقة"


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

الجهات الفاعلة:

  • المستخدم
  • تطبيق العميل
  • خدمة الهوية
  • خادم الموارد

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

المستخدم (ع): (من خلال إطلاق تطبيق عميل يستند إلى الويب) عزيزي تطبيق العميل ، أحتاج إلى "هذا المورد".
تطبيق العميل (K): عزيزي المستخدم ، قدم أولاً مفتاح "هذا المورد". بدون مفتاح ، يتم إغلاق الوصول إلى "هذا المورد".
P: ليس لدي مثل هذا المفتاح.
ك: بعد ذلك ، سوف أقوم بتحويلك مؤقتًا إلى خدمة تحديد الهوية التي نتفق معها على إصدار مفاتيح لخادم الموارد. (يعيد التوجيه P. إلى خدمة تحديد الهوية)
خدمة تحديد الهوية (I): عزيزي المستخدم ، فضلاً أخبرني من أنت وما هي المفاتيح التي تحتاجها؟
P: أنا ، مستخدم Ytsuken المستخدم ، كلمة المرور هي كذا وكذا ، أريد الوصول إلى "هذا المورد".
و: شكرا لك ، الرفيق جتسوكين. المصادقة ناجحة وتم التحقق من هويتك. هنا هو مفتاح "هذا المورد" (P. يعيد التوجيه إلى K.)
الباحث: عميل ، لقد أحضرت لك مفتاح "المورد" الذي أحتاجه.
K: شكرا لك المستخدم. المفتاح هو الصحيح. هنا هو "المورد" الذي طلبته.

الستار. سيمفونية الافتتاح لريتشارد شتراوس من فيلم "Space Odyssey of 2001"

الجزء 3. خدمة الترخيص الحقيقي


الآن دعونا ننكب على العمل. لدينا ثلاث مهام على جدول الأعمال: لتعيين الشخصيات ، وإعداد المسرح ولعب المسرحية. ويتم تحديد كل شيء مرة واحدة على النظام الأساسي InterSystems IRIS. ولكن هذا ليس ضروريًا ، يمكنك تجميع تصميم من منصات مختلفة وفقًا لتقديرك. على سبيل المثال ، في هذه المجموعة: خادم OAuth Keycloak + عميل OAuth ومورد OAuth على IRIS. بمعنى آخر:

  1. قم بتهيئة خادم OAuth وتشغيله من خلال تسجيل عميل العرض التوضيحي الخاص بنا عليه.
  2. قم بإعداد عميل OAuth تجريبي عن طريق توصيله بخادم OAuth وموارد الويب.
  3. تطوير تطبيقات العميل التي يمكن أن تستخدم OAuth. يمكنك استخدام Java و Python و C # و NodeJS. فيما يلي نموذج لرمز التطبيق في ObjectScript.

يحتوي موقع مجتمع المطورين على إرشادات مفصلة من دانيال كوتاك في ثلاثة أجزاء مع أمثلة لاستخدام OAuth في IRIS لتطبيقات مختلفة تعتمد على CSP ( الجزء 1 ، الجزء 2 ، الجزء 3 ).
هناك الكثير من الإعدادات في OAuth. لذلك ، اكتب قوائم مراجعة لنفسك - وهذا هو التطبيق الأكثر صحة بالنسبة لهم. الأمثلة والفراغات أدناه.
أين يمكن الحصول على InterSystems IRIS الجاهزة للعينة؟ هناك خياران متاحان على الأقل للجميع:

احصل على خادم IRIS مهيأ مسبق التجهيز على منصة تدريب InterSystems Learning Services في قسم InterSystems Learning Labs.

تثبيت حاوية عامل ميناء الجاهزة . اقرأ المزيد في المقالة - إرشادات خطوة بخطوة للمبتدئين في إطلاق IRIS باستخدام مطوري Docker أو ، الذين يفضلون مقطع فيديو ، تعليمة screencast لتطوير الحلول مع InterSystems IRIS باستخدام Docker و VSCode

1-1 تكوين خادم OAuth


نذهب إلى بوابة إدارة IRIS واختر القسم:

إدارة النظام >> الأمان >> OAuth 2.0 >> Server

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



علامة التبويب الإعدادات العامة:
الوصف: اختياري ، على سبيل المثال ، لذلك "خادم التخويل"
نقطة نهاية المولد (المشار إليها فيما يلي باسم CTG) هي اسم المضيف: اسم DNS لخادمك
أنواع الأذونات المدعومة (حدد واحدًا على الأقل):
رمز التفويض
ضمني
بيانات الاعتماد: مورد ، مالك ، كلمة المرور
أوراق اعتماد العملاء
تكوين SSL / TLS: oauthserver

علامة تبويب الأذونات:
إضافة وحدات التخزين المدعومة: على سبيل المثال النطاق 1 والنطاق 2

علامة تبويب الفواصل الزمنية:
مفتاح الوصول الفاصل: 3600
كود التفويض الزمني: 60
تحديث الفاصل الزمني الرئيسي: 86400
فاصل المقاطعة الفاصل: 86400
فترة صلاحية مفتاح العميل: 0

علامة تبويب إعدادات JWT:
خوارزمية الإدخال: RS512
خوارزمية إدارة المفاتيح: RSA-OAEP
خوارزمية تشفير المحتوى: A256CBC-HS512

علامة تبويب التخصيص:
تحديد الفئة:٪ OAuth2.Server.Authenticate
تحقق فئة المستخدم:٪ OAuth2.Server.Validate
فئة خدمة الجلسة: OAuth2.Server.Session
إنشاء فئة مفتاح:٪ OAuth2.Server.JWT
مساحة تخصيص التخصيص:٪ SYS
أدوار التخصيص (حدد واحدًا على الأقل):٪ DB_IRISSYS و٪ Manager

حفظ.

1-2 تسجيل العميل على خادم OAuth




زر وصف العميل >> زر إنشاء وصف العميل:

علامة التبويب الإعدادات العامة:
الاسم: العميل
الوصف: تعسفي
نوع العميل: سري
إعادة توجيه عناوين URL: عنوان نقطة الإرجاع في طلبنا بعد المصادقة
أنواع الإذن المدعومة
رمز التفويض: نعم
ضمني
بيانات الاعتماد: مورد ، مالك ، كلمة المرور
أوراق اعتماد العملاء
إذن JWT
أنواع الإجابات المدعومة
قانون
id_token
مفتاح id_token
رمز
نوع التفويض: بسيط

علامة تبويب بيانات اعتماد العميل: معبأ تلقائيًا

علامة تبويب معلومات العميل:
عنوان URL لبدء التشغيل:
شاشة تسجيل الدخول
اسم العميل
رابط الشعار
عنوان URL لصفحة العميل الرئيسية
عنوان url للسياسة
شروط عنوان URL للخدمة

2-1 تكوين الربط على عميل خادم OAuth


إدارة النظام >> الأمان >> OAuth 2.0 >> Client



إنشاء وصف الخادم:
نقطة نهاية المولد: تأخذ من المعلمات الخادم العام ، انظر أعلاه
تكوين SSL / TLS: اختر من قائمة التكوين المسبق

سيتم تنزيل محتويات الحقول المتبقية تلقائيًا من الخادم ، ولكن يمكنك أيضًا تكوينها يدويًا:

خادم التخويل
نقطة نهاية التخويل: CTG + / تخويل
نقطة النهاية الرئيسية: CTG + / الرمز المميز
نقطة نهاية معلومات المستخدم: CTG + / userinfo
نقطة النهاية للتشخيص الذاتي: CTG + / الإلغاء
نقطة النهاية لإلغاء المفتاح: CTG + / التأمل
JSON Web Token Settings (JWT)
مصدر آخر إلى جانب التسجيل الديناميكي: حدد JWKS من URL
عنوان URL: CTG + / jwks



من هذه القائمة ، على سبيل المثال ، يمكن ملاحظة (scopes_supported و Claims_supported) أن الخادم يمكنه تزويد عميل OAuth بمعلومات مختلفة عن المستخدم. وجدير بالاهتمام أنه عند تنفيذ طلبك ، ستحتاج إلى سؤال المستخدم عن البيانات التي هو مستعد لمشاركتها. علاوة على ذلك ، في مثالنا ، سيُطلب منا الإذن فقط من قبل النطاق 1.

حفظ.

إذا كان هناك خطأ يشير إلى طبقة المقابس الآمنة ، فانتقل إلى الإعدادات:
إدارة النظام >> الأمان >> تكوين SSL / TSL

2-2 تكوين عميل OAuth


إدارة النظام >> الأمان >> OAuth 2.0 >> العميل >> تكوين العميل >> إنشاء تكوين عميل



علامة التبويب العامة:
اسم التطبيق: العميل التجريبي
اسم العميل: العميل التجريبي
الوصف: اختياري
ممكن: نعم
نوع العميل: سري
تكوين SSL / TCL: oauthclient
عنوان URL لإعادة توجيه العميل: اسم DNS للخادم الخاص بك
أنواع التصاريح المطلوبة
رمز التفويض: نعم
ضمني
بيانات الاعتماد: مورد ، مالك ، كلمة المرور
أوراق اعتماد العملاء
إذن JWT
نوع التفويض: بسيط

علامة تبويب معلومات العميل:
شاشة تسجيل الدخول
رابط الشعار
عنوان URL لصفحة العميل الرئيسية
عنوان url للسياسة
شروط عنوان URL للخدمة
الحجم الافتراضي: نحن نأخذ من تلك المحددة في وقت سابق على الخادم ، على سبيل المثال ، النطاق 1
عناوين البريد الإلكتروني لجهة الاتصال (مفصولة بفاصلة)
الحد الأقصى لعمر الافتراضي (بالثواني)

علامة تبويب إعدادات JWT:
JSON Web Token Settings (JWT)
إنشاء إعدادات JWT من بيانات اعتماد X509
الخوارزميات IDToken
التوقيع: RS256
التشفير: A256CBC
مفتاح: RSA-OAEP
الخوارزميات Userinfo
خوارزميات رمز الوصول
خوارزميات الاستعلام

علامة تبويب بيانات اعتماد العميل:
الهوية. العميل: من الذي صدر عند تسجيل العميل على الخادم (انظر أعلاه)
هوية العميل الصادرة
سر العميل: من الذي صدر عند تسجيل العميل على الخادم (انظر أعلاه)
سري العميل تنتهي
تسجيل العملاء URI

حفظ.

الجزء 4. رمز


لنقم بإنشاء تطبيق ويب بسيط مع ترخيص OAuth و REST.
عند العمل ، تعتمد OAuth على أن قنوات الاتصال بين المشاركين في التفاعل (الخادم والعملاء وتطبيق الويب ومتصفح المستخدم وخادم الموارد) محمية بطريقة ما. في معظم الأحيان ، يتم لعب هذا الدور بواسطة SSL / TLS. ولكن ستعمل OAuth أيضًا على القنوات غير الآمنة. على سبيل المثال ، يستخدم خادم Keycloak ، افتراضيًا ، بروتوكول HTTP ويمضي دون حماية. هذا يبسط التطوير وتصحيح الأخطاء أثناء التطوير. مع الاستخدام الحقيقي لخدمات OAuth ، يجب تمكين حماية القناة بشكل صارم - يتم تسجيل ذلك في وثائق Keycloak. يتخذ مطورو IRS من InterSystems مقاربة أكثر صرامة لـ OAuth - مطلوب SSL / TSL. التبسيط الوحيد هو أنه يمكنك استخدام الشهادات الموقعة ذاتيا أو استخدام خدمة PKI المضمنة في IRIS (إدارة النظام >> الأمان >> نظام المفتاح العام).
يتم التحقق من إذن المستخدم مع الإشارة الواضحة إلى معلمتين - اسم التطبيق الخاص بك ووحدة التخزين التي يدعمها خادم OAuth وعميل OAuth (النطاق - أتساءل عن كيفية تسميته بشكل صحيح باللغة الروسية؟):

Parameter OAUTH2APPNAME = "OAuthClient"; set isAuthorized = ##class(%SYS.OAuth2.AccessToken).IsAuthorized( ..#OAUTH2APPNAME, .sessionId, "scope1", .accessToken, .idtoken, .responseProperties, .error) 

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

 Parameter OAUTH2CLIENTREDIRECTURI = "https://52773b-76230063.labs.learning.intersystems.com/oauthclient/" set url = ##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint( ..#OAUTH2APPNAME, "scope1", ..#OAUTH2CLIENTREDIRECTURI, .properties, .isAuthorized, .sc) 

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

عند نقل مستخدم باستخدام الرابط المستلم ، سينفذ الخادم إجراء تحديد هوية المستخدم ويطلب إذن منه للعمل مع بيانات الاعتماد في تطبيق ويب ، وكذلك حفظ النتيجة في OAuth2.Server.Session له عالمي في منطقة٪ SYS:





3. إظهار بيانات المستخدم المعتمد. عند الانتهاء بنجاح من الإجراءات ، لدينا ، على سبيل المثال ، رمز وصول. هيا بنا

 set valid = ##class(%SYS.OAuth2.Validation).ValidateJWT( .#OAUTH2APPNAME, accessToken, "scope1", .aud, .JWTJsonObject, .securityParameters, .sc ) 

رمز العمل الكامل لمثال العمل مع OAuth:
 Class OAuthClient.REST Extends %CSP.REST { Parameter OAUTH2APPNAME = "OAuthClient"; Parameter OAUTH2CLIENTREDIRECTURI = "https://52773b-76230063.labs.learning.intersystems.com/oauthclient/"; // to keep sessionId Parameter UseSession As Integer = 1; XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ] { <Routes> <Route Method="GET" Url = "/" Call = "Do" /> </Routes> } ClassMethod Do() As %Status { // Check for accessToken set isAuthorized = ##class(%SYS.OAuth2.AccessToken).IsAuthorized( ..#OAUTH2APPNAME, .sessionId, "scope1", .accessToken, .idtoken, .responseProperties, .error) // to show accessToken if isAuthorized { set valid = ##class(%SYS.OAuth2.Validation).ValidateJWT( ..#OAUTH2APPNAME, accessToken, "scope1", .aud, .JWTJsonObject, .securityParameters, .sc ) &html< Hello!<br> > w "You access token = ", JWTJsonObject.%ToJSON() &html< </html> > quit $$$OK } // perform the process of user and client identification and get accessToken set url = ##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint( ..#OAUTH2APPNAME, "scope1", ..#OAUTH2CLIENTREDIRECTURI, .properties, .isAuthorized, .sc) if $$$ISERR(sc) { w "error handling here" quit $$$OK } // url magic correction: change slashes in the query parameter to its code set urlBase = $PIECE(url, "?") set urlQuery = $PIECE(url, "?", 2) set urlQuery = $REPLACE(urlQuery, "/", "%2F") set url = urlBase _ "?" _ urlQuery &html< <html> <h1>  IRIS   OAuth2</h1> <a href = "#(url)#">  <b>IRIS</b></a> </html> > quit $$$OK } } 


إذا لزم الأمر ، قم بتمكين رسائل تصحيح الأخطاء الموسعة على خادم OAuth وعميل OAuth. تتم كتابة الرسائل إلى ISCLOG بشكل عام في منطقة٪ SYS. اكتب في IRIS الطرفية الخاصة بك (أو تثبيت واستخدام محطة ويب ):

 set ^%ISCLOG = 5 set ^%ISCLOG("Category", "OAuth2") = 5 set ^%ISCLOG("Category", "OAuth2Server") = 5 

راجع وثائق IRIS باستخدام OAuth 2.0 و OpenID Connect لمزيد من المعلومات .

الاستنتاجات:

  1. تساعد OAuth الخدمات المنفصلة جغرافيا وجغرافيا مع بيانات اعتماد المستخدم وقواعد البيانات "العاملة". وبالتالي ، تعزيز حماية بيانات تحديد الهوية ، وإذا لزم الأمر ، والامتثال لمتطلبات القوانين المتعلقة بحماية البيانات الشخصية لمختلف البلدان.
  2. باستخدام OAuth ، يمكن منح المستخدم الفرصة للعمل بأمان من أجهزة متعددة في نفس الوقت و "تألق" بياناته الشخصية إلى الحد الأدنى من الخدمات والتطبيقات المختلفة. كما لا يتطلب الأمر أخذ معلومات "زائدة عن الحاجة" عن المستخدمين في خدماتهم ، أي إجراء معالجة بيانات غير شخصية في خدماتهم.
  3. عند استخدام InterSystems IRIS ، لديك مجموعة كاملة من الأدوات الجاهزة لاختبار ونشر خدمات OAuth و OIDC سواء المستقلة أو بالتعاون مع منتجات برامج الجهات الخارجية.

ما هي الصناعات الأكثر شيوعًا التي تستخدم نظام InterSystems IRIS؟
لأتمتة الرعاية الصحية ، في القطاع المالي ، لمشاريع الحكومة الإلكترونية ، في مجال الخدمات اللوجستية وتجارة التجزئة والعديد من الصناعات الأخرى.

إذا كنت مهتمًا بمهام أتمتة الرعاية الصحية ، فعليك الانتباه إلى معيار FHIR. لدى InterSystems IRIS for Health (إصدار خاص من النظام الأساسي InterSystems IRIS) دعمًا لمعيار FHIR للتكامل وتطوير التطبيقات
كما ترون أعلاه ، يمكن الوصول بسهولة إلى جميع ميزات OAuth وجاهزة للاستخدام بالكامل. إذا لزم الأمر ، يمكنك استبدال فئات المعالج وواجهات المستخدم بخاصة بك. يمكن إعداد إعدادات الخادم والعميل من OAuth من ملفات التكوين ، بدلاً من استخدام بوابة الإدارة.

Source: https://habr.com/ru/post/ar466699/


All Articles