سلاك #uaa
UAA عبارة عن خدمة إدارة هوية متعددة المستأجرين، تُستخدم في Cloud Foundry، ولكنها متاحة أيضًا كخادم OAuth2 مستقل. ويتمثل دورها الأساسي كموفر OAuth2، وإصدار الرموز المميزة لتطبيقات العميل لاستخدامها عندما يتصرفون نيابة عن مستخدمي Cloud Foundry. ويمكنه أيضًا مصادقة المستخدمين باستخدام بيانات اعتماد Cloud Foundry الخاصة بهم، ويمكنه العمل كخدمة SSO باستخدام بيانات الاعتماد هذه (أو غيرها). يحتوي على نقاط نهاية لإدارة حسابات المستخدمين وتسجيل عملاء OAuth2، بالإضافة إلى العديد من وظائف الإدارة الأخرى.
خدمة المصادقة هي uaa
. إنه تطبيق ويب Spring MVC عادي. قم بالنشر كالمعتاد في Tomcat أو الحاوية التي تختارها، أو قم بتنفيذ ./gradlew run
لتشغيله مباشرة من دليل uaa
في الشجرة المصدر. عند التشغيل باستخدام gradle، فإنه يستمع على المنفذ 8080 ويكون عنوان URL هو http://localhost:8080/uaa
يدعم خادم UAA واجهات برمجة التطبيقات المحددة في مستند UAA-APIs. لتلخيص:
نقطتي النهاية OAuth2 /oauth/authorize و/oauth/token
نقطة نهاية /login_info للسماح بالاستعلام عن مطالبات تسجيل الدخول المطلوبة
نقطة نهاية /check_token، للسماح لخوادم الموارد بالحصول على معلومات حول رمز الوصول المقدم من عميل OAuth2.
نقطة نهاية /token_key، للسماح لخوادم الموارد بالحصول على مفتاح التحقق للتحقق من توقيعات الرمز المميز
نقطة نهاية توفير مستخدم SCIM
يقوم OpenID بتوصيل نقاط النهاية لدعم المصادقة/معلومات المستخدم. دعم جزئي لـ OpenID.
يمكن إجراء المصادقة بواسطة عملاء سطر الأوامر عن طريق إرسال بيانات الاعتماد مباشرة إلى نقطة النهاية /oauth/authorize
(كما هو موضح في مستند UAA-API). يوجد ImplicitAccessTokenProvider
في Spring Security OAuth يمكنه القيام بالمهمة الثقيلة إذا كان عميلك Java.
مصادقة
GET /login
واجهة تسجيل الدخول النموذجية الأساسية.
الموافقة على منح رمز OAuth2
GET /oauth/authorize?client_id=app&response_type=code...
نقطة نهاية تفويض OAuth2 القياسية.
الحصول على رمز الوصول
POST /oauth/token
نقطة نهاية تفويض OAuth2 القياسية.
متطلبات:
إذا نجح هذا فأنت في مجال الأعمال:
$ git clone git://github.com/cloudfoundry/uaa.git
$ cd uaa
$ ./gradlew run
تعمل جميع التطبيقات معًا مع التطبيقات التي تعمل على نفس المنفذ (8080) مثل /uaa
و /app
و /api
.
سوف تقوم UAA بتسجيل الدخول إلى ملف يسمى uaa.log
والذي يمكن العثور عليه باستخدام الأمر التالي: -
$ sudo lsof | grep uaa.log
والتي يجب أن تجدها تحت شيء مثل: -
$TMPDIR/cargo/conf/logs/
قم أولاً بتشغيل خادم UAA كما هو موضح أعلاه:
$ ./gradlew run
من محطة طرفية أخرى، يمكنك استخدام الضفيرة للتحقق من بدء UAA عن طريق طلب معلومات النظام:
$ curl --silent --show-error --head localhost:8080/uaa/login | head -1
HTTP/1.1 200
بالنسبة للطلبات المعقدة، يكون التفاعل مع UAA أكثر ملاءمة باستخدام uaac
، عميل سطر أوامر UAA.
لتحميل وكيل JDWP لتصحيح أخطاء UAA jvm، قم بتشغيل الخادم كما يلي:
./gradlew run -Dxdebug=true
أو
./gradlew -Dspring.profiles.active=default,hsqldb,debug run
يمكنك بعد ذلك توصيل مصحح الأخطاء بالمنفذ 5005 من عملية jvm.
لتعليق بدء تشغيل الخادم مؤقتًا حتى يتم إرفاق مصحح الأخطاء (مفيد لتصحيح أخطاء رمز بدء التشغيل)، قم بتشغيل الخادم كما يلي:
./gradlew run -Dxdebugs=true
أو
./gradlew -Dspring.profiles.active=default,hsqldb,debugs run
يعمل ./gradlew run
على تشغيل خادم UAA باستخدام قاعدة بيانات hsqldb افتراضيًا.
% docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=changeme -d -p3306:3306 mysql
uaa
(على سبيل المثال في جلسة mysql التفاعلية) % mysql -h 127.0.0.1 -u root -p
...
mysql > create database uaa ;
% ./gradlew -Dspring.profiles.active=mysql,default run
docker run --name postgres1 -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres
uaa
(على سبيل المثال في جلسة psql التفاعلية) % psql -h 127.0.0.1 -U postgres
create database uaa;
create user root with superuser password 'changeme';
% ./gradlew -Dspring.profiles.active=postgresql,default run
c uaa
psql (14.5 (Homebrew), server 15.0 (Debian 15.0-1.pgdg110+1))
WARNING: psql major version 14, server major version 15.
Some psql features might not work.
You are now connected to database "uaa" as user "postgres".
d
List of relations
Schema | Name | Type | Owner
--------+-------------------------------+----------+-------
public | authz_approvals | table | root
public | expiring_code_store | table | root
public | external_group_mapping | table | root
public | external_group_mapping_id_seq | sequence | root
public | group_membership | table | root
public | group_membership_id_seq | sequence | root
public | groups | table | root
public | identity_provider | table | root
public | identity_zone | table | root
public | oauth_client_details | table | root
public | oauth_code | table | root
public | oauth_code_id_seq | sequence | root
public | revocable_tokens | table | root
public | schema_version | table | root
public | sec_audit | table | root
public | sec_audit_id_seq | sequence | root
public | spring_session | table | root
public | spring_session_attributes | table | root
public | user_info | table | root
public | users | table | root
(23 rows)
يمكنك تشغيل اختبارات التكامل مع عامل الإرساء
$ run-integration-tests.sh <dbtype>
سيتم إنشاء حاوية عامل إرساء تعمل بقاعدة بيانات uaa + ldap + حيث يتم إجراء اختبارات التكامل من خلالها.
تستخدم اختبارات وحدة uaa الافتراضية (./gradlew testintegrationTest) hsqldb.
لتشغيل اختبارات الوحدة باستخدام عامل الإرساء:
$ run-unit-tests.sh <dbtype>
تستخدم اختبارات وحدة uaa الافتراضية ( ./gradlew test
) hsqldb.
ابدأ بمعرفة المشروع الذي ينتمي إليه اختبارك. يمكنك العثور على كل المشروع عن طريق التشغيل
$ ./gradlew projects
لتشغيل فئة اختبار معينة، يمكنك تحديد الوحدة النمطية وفئة الاختبار.
$ ./gradlew :<project name>:test --tests <TestClass>.<MethodName>
في هذا المثال، يتم تشغيل اختبارات JdbcScimGroupMembershipManagerTests فقط في وحدة خادم الهوية السحابية:
$ ./gradlew :cloudfoundry-identity-server:test
--tests "org.cloudfoundry.identity.uaa.scim.jdbc.JdbcScimGroupMembershipManagerTests"
أو لتشغيل كافة الاختبارات في الفصل الدراسي
$ ./gradlew :<project name>:test --tests <TestClass>
قد ترغب في استخدام أمر gradle الكامل الموجود في الجزء السفلي من البرنامج النصي scripts/unit-tests.sh
عن طريق إضافة اسم المشروع مسبقًا إلى أمر test
وإضافة خيار --tests
.
$ ./gradlew :clean :assemble -Pversion=${UAA_VERSION}
يوجد في الواقع العديد من المشاريع هنا، تطبيق خادم uaa
الرئيسي ومكتبة العميل وبعض العينات:
uaa
مشروع WAR لسهولة النشر
server
مشروع JAR يحتوي على تنفيذ REST API الخاص بـ UAA (بما في ذلك SCIM) وواجهة المستخدم
model
مشروع JAR يستخدمه كل من مكتبة العميل والخادم
api
(نموذج) هي خدمة موارد OAuth2 والتي تقوم بإرجاع قائمة وهمية من التطبيقات المنشورة
app
(نموذج) هو تطبيق مستخدم يستخدم كلاً مما سبق
من حيث CloudFoundry
توفر uaa
خدمة مصادقة بالإضافة إلى التفويض المعتمد للخدمات والتطبيقات الخلفية (من خلال إصدار رموز وصول OAuth2).
api
هي خدمة توفر الموارد التي قد ترغب التطبيقات الأخرى في الوصول إليها نيابة عن مالك المورد (المستخدم النهائي).
app
عبارة عن تطبيق ويب يحتاج إلى تسجيل الدخول الموحد والوصول إلى خدمة api
نيابة عن المستخدمين.
المتطلبات الأساسية
نشر Kubernetes قيد التطوير النشط. يجب أن تتوقع تغييرات متكررة (وربما متقطعة). سيتم تحديث هذا القسم مع إحراز تقدم في مجموعة الميزات هذه. اعتبارا من الآن:
يحتوي دليل K8s على قوالب ytt
التي يمكن عرضها وتطبيقها على مجموعة K8s.
في مرحلة التطوير، يمكن استخدام Makefile هذا في أنشطة العرض والنشر الشائعة.
في مرحلة الإنتاج، ستحتاج على الأرجح إلى استخدام ytt مباشرةً. شيء مثل هذا يجب أن يجعلك تنطلق:
$ ytt -f templates -f values/default-values.yml | kubectl apply -f -
إذا كنت ترغب في تجاوز بعض هذه القيم، فيمكنك القيام بذلك من خلال الاستفادة من وظيفة التراكب في YTT.
$ ytt -f templates -f values/default-values.yml -f your-dir/production-values.yml | kubectl apply -f -
بالطبع، يمكنك دائمًا التخلي عن القيم الافتراضية تمامًا وتوفير ملف القيم الخاص بك.
فيما يلي بعض الطرق التي يمكنك من خلالها المشاركة في المجتمع:
متطلبات:
لتصحيح أخطاء عمليات تكامل UAA وLDAP، نستخدم صورة عامل إرساء OpenLdap من مشروع Bitnami الخاص ببرنامج VMWare
uaa/src/main/resources/uaa.yml
وقم بتمكين LDAP عن طريق إلغاء التعليق على السطر 7، spring_profiles: ldap,default,hsqldb
docker-compose up
من scripts/ldap
scripts/ldap
تحقق من الاتصال بتشغيل حاوية OpenLdap عن طريق تشغيل docker-confirm-ldapquery.sh
./gradlew run
/uaa
وقم بتسجيل الدخول باستخدام مستخدم LDAP user01
وكلمة المرور password1
استخدم الأمر أدناه لتنظيف الحاوية ووحدة التخزين:
docker-compose down --volumes