Kendur #uaa
UAA adalah layanan manajemen identitas multi-penyewa, yang digunakan di Cloud Foundry, namun juga tersedia sebagai server OAuth2 yang berdiri sendiri. Peran utamanya adalah sebagai penyedia OAuth2, yang menerbitkan token untuk digunakan aplikasi klien saat mereka bertindak atas nama pengguna Cloud Foundry. Layanan ini juga dapat mengautentikasi pengguna dengan kredensial Cloud Foundry mereka, dan dapat bertindak sebagai layanan SSO menggunakan kredensial tersebut (atau lainnya). Ini memiliki titik akhir untuk mengelola akun pengguna dan untuk mendaftarkan klien OAuth2, serta berbagai fungsi manajemen lainnya.
Layanan otentikasi adalah uaa
. Ini adalah aplikasi web Spring MVC biasa. Terapkan seperti biasa di Tomcat atau wadah pilihan Anda, atau jalankan ./gradlew run
untuk menjalankannya langsung dari direktori uaa
di pohon sumber. Saat dijalankan dengan gradle, ia mendengarkan pada port 8080 dan URL-nya adalah http://localhost:8080/uaa
Server UAA mendukung API yang ditentukan dalam dokumen UAA-API. Untuk meringkas:
Titik akhir OAuth2 /oauth/authorize dan /oauth/token
Titik akhir /login_info untuk memungkinkan permintaan login yang diperlukan
Titik akhir /check_token, untuk memungkinkan server sumber daya memperoleh informasi tentang token akses yang dikirimkan oleh klien OAuth2.
Titik akhir /token_key, untuk memungkinkan server sumber daya memperoleh kunci verifikasi guna memverifikasi tanda tangan token
Titik akhir provisi pengguna SCIM
OpenID menghubungkan titik akhir untuk mendukung otentikasi/info pengguna. Dukungan OpenID parsial.
Otentikasi dapat dilakukan oleh klien baris perintah dengan mengirimkan kredensial langsung ke titik akhir /oauth/authorize
(seperti yang dijelaskan dalam dokumen UAA-API). Ada ImplicitAccessTokenProvider
di Spring Security OAuth yang dapat melakukan pekerjaan berat jika klien Anda adalah Java.
Otentikasi
GET /login
Antarmuka login formulir dasar.
Setujui pemberian token OAuth2
GET /oauth/authorize?client_id=app&response_type=code...
Titik Akhir Otorisasi OAuth2 Standar.
Dapatkan token akses
POST /oauth/token
Titik Akhir Otorisasi OAuth2 Standar.
Persyaratan:
Jika ini berhasil, Anda berada dalam bisnis:
$ git clone git://github.com/cloudfoundry/uaa.git
$ cd uaa
$ ./gradlew run
Semua aplikasi bekerja sama dengan aplikasi yang berjalan pada port yang sama (8080) dengan /uaa
, /app
dan /api
.
UAA akan login ke file bernama uaa.log
yang dapat ditemukan menggunakan perintah berikut:-
$ sudo lsof | grep uaa.log
yang harus Anda temukan di bawah sesuatu seperti: -
$TMPDIR/cargo/conf/logs/
Pertama jalankan server UAA seperti dijelaskan di atas:
$ ./gradlew run
Dari terminal lain Anda dapat menggunakan curl untuk memverifikasi bahwa UAA telah dimulai dengan meminta informasi sistem:
$ curl --silent --show-error --head localhost:8080/uaa/login | head -1
HTTP/1.1 200
Untuk permintaan yang kompleks akan lebih mudah untuk berinteraksi dengan UAA menggunakan uaac
, Klien Baris Perintah UAA.
Untuk memuat agen JDWP untuk debugging UAA jvm, mulai server sebagai berikut:
./gradlew run -Dxdebug=true
atau
./gradlew -Dspring.profiles.active=default,hsqldb,debug run
Anda kemudian dapat melampirkan debugger Anda ke port 5005 dari proses jvm.
Untuk menangguhkan permulaan server hingga debugger dipasang (berguna untuk men-debug kode permulaan), mulai server sebagai berikut:
./gradlew run -Dxdebugs=true
atau
./gradlew -Dspring.profiles.active=default,hsqldb,debugs run
./gradlew run
menjalankan server UAA dengan database hsqldb secara default.
% docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=changeme -d -p3306:3306 mysql
uaa
(misalnya dalam sesi interaktif 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
(misalnya dalam sesi interaktif 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)
Anda dapat menjalankan tes integrasi dengan buruh pelabuhan
$ run-integration-tests.sh <dbtype>
akan membuat wadah buruh pelabuhan yang menjalankan uaa + ldap + database yang menjalankan pengujian integrasi.
Pengujian unit uaa default (./gradlew test integrasiTest) menggunakan hsqldb.
Untuk menjalankan pengujian unit dengan buruh pelabuhan:
$ run-unit-tests.sh <dbtype>
Tes unit uaa default ( ./gradlew test
) menggunakan hsqldb.
Mulailah dengan mencari tahu proyek gradle mana yang termasuk dalam pengujian Anda. Anda dapat menemukan semua proyek dengan menjalankan
$ ./gradlew projects
Untuk menjalankan kelas pengujian tertentu, Anda dapat menentukan modul dan kelas pengujian.
$ ./gradlew :<project name>:test --tests <TestClass>.<MethodName>
Dalam contoh ini, ini hanya menjalankan pengujian JdbcScimGroupMembershipManagerTests di modul cloudfoundry-identity-server:
$ ./gradlew :cloudfoundry-identity-server:test
--tests "org.cloudfoundry.identity.uaa.scim.jdbc.JdbcScimGroupMembershipManagerTests"
atau untuk menjalankan semua tes di Kelas
$ ./gradlew :<project name>:test --tests <TestClass>
Anda mungkin ingin menggunakan perintah gradle lengkap yang terdapat di bagian bawah skrip scripts/unit-tests.sh
dengan menambahkan nama proyek ke perintah test
dan menambahkan opsi --tests
.
$ ./gradlew :clean :assemble -Pversion=${UAA_VERSION}
Sebenarnya ada beberapa proyek di sini, aplikasi server uaa
utama, perpustakaan klien dan beberapa contoh:
uaa
proyek PERANG untuk penerapan yang mudah
server
proyek JAR yang berisi implementasi REST API UAA (termasuk SCIM) dan UI
model
proyek JAR yang digunakan oleh perpustakaan klien dan server
api
(sampel) adalah layanan sumber daya OAuth2 yang mengembalikan daftar tiruan aplikasi yang diterapkan
app
(sampel) adalah aplikasi pengguna yang menggunakan kedua hal di atas
Dalam istilah CloudFoundry
uaa
menyediakan layanan autentikasi ditambah delegasi resmi untuk layanan dan aplikasi back-end (dengan menerbitkan token akses OAuth2).
api
adalah layanan yang menyediakan sumber daya yang mungkin ingin diakses oleh aplikasi lain atas nama pemilik sumber daya (pengguna akhir).
app
adalah aplikasi web yang memerlukan sistem masuk tunggal dan akses ke layanan api
atas nama pengguna.
Prasyarat
Penerapan Kubernetes sedang dalam pengembangan aktif. Anda harus mengharapkan perubahan yang sering terjadi (dan mungkin dapat menyebabkan gangguan). Bagian ini akan diperbarui seiring kemajuan yang dicapai pada rangkaian fitur ini. Sampai sekarang:
Direktori K8s berisi templat ytt
yang dapat dirender dan diterapkan ke klaster K8s.
Dalam pengembangannya, Makefile ini dapat digunakan untuk aktivitas rendering dan penerapan umum.
Dalam produksi, kemungkinan besar Anda ingin menggunakan ytt secara langsung. Sesuatu seperti ini akan membantu Anda:
$ ytt -f templates -f values/default-values.yml | kubectl apply -f -
Jika Anda ingin mengganti beberapa nilai tersebut, Anda dapat melakukannya dengan memanfaatkan fungsi hamparan YTT.
$ ytt -f templates -f values/default-values.yml -f your-dir/production-values.yml | kubectl apply -f -
Tentu saja, Anda selalu dapat mengabaikan nilai default dan menyediakan file nilai Anda sendiri.
Berikut beberapa cara bagi Anda untuk terlibat dalam komunitas:
Persyaratan:
Untuk men-debug integrasi UAA dan LDAP, kami menggunakan gambar buruh pelabuhan OpenLdap dari proyek Bitnami VMWare
uaa/src/main/resources/uaa.yml
dan aktifkan LDAP dengan menghapus komentar pada baris 7, spring_profiles: ldap,default,hsqldb
docker-compose up
dari scripts/ldap
scripts/ldap
verifikasi konektivitas hingga menjalankan wadah OpenLdap dengan menjalankan docker-confirm-ldapquery.sh
./gradlew run
/uaa
dan masuk dengan pengguna LDAP user01
dan kata sandi kata password1
Gunakan perintah di bawah ini untuk membersihkan wadah dan volume:
docker-compose down --volumes