Panduan ini menjelaskan cara menyiapkan single sign-on (SSO) untuk aplikasi dalam instans Alibaba Cloud Service Mesh (ASM).
Prasyarat
-
Anda telah membuat instans ASM Edisi Perusahaan. Untuk informasi selengkapnya, lihat Buat instans ASM.
Kluster ACK yang dikelola telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.
-
Anda telah mengaktifkan injeksi sidecar otomatis untuk namespace default. Untuk informasi selengkapnya, lihat Aktifkan injeksi sidecar otomatis.
Informasi latar belakang
Banyak aplikasi memerlukan kontrol akses dan hanya memberikan akses kepada pengguna yang telah terotentikasi. Seiring kompleksitas sistem meningkat, single sign-on (SSO) menjadi solusi efektif yang memungkinkan pengguna masuk ke beberapa sistem hanya dengan satu akun. Layanan Otorisasi Kustom di ASM memungkinkan Anda menerapkan SSO untuk aplikasi mesh tanpa perubahan kode.
Menggunakan ASM untuk menerapkan SSO dapat mengurangi biaya refaktoring dan operasi serta pemeliharaan (O&M) aplikasi. Panduan ini menggunakan instans Alibaba Cloud IDaaS sebagai penyedia identitas (IdP) untuk mengaktifkan SSO bagi layanan dalam mesh. Alih-alih menyematkan logika autentikasi dan otorisasi ke dalam aplikasi, Anda dapat mengonfigurasi ASM untuk menggunakan layanan otorisasi kustom yang terintegrasi dengan Alibaba Cloud IDaaS atau penyedia identitas (IdP) lain yang kompatibel dengan OpenID Connect (OIDC) guna menangani alur otorisasi dan login. Setelah pengguna berhasil terotentikasi, permintaan beserta informasi identitas pengguna diteruskan ke aplikasi, yang kemudian dapat menjalankan logika bisnis berdasarkan identitas tersebut.
Konsep
|
Konsep |
Deskripsi |
|
IdP |
Penyedia identitas (IdP) adalah layanan yang membuat, memelihara, dan mengelola identitas pengguna serta menyediakan layanan autentikasi. Misalnya, ketika Anda menggunakan akun Google untuk masuk ke aplikasi pihak ketiga, Google bertindak sebagai IdP. |
|
OIDC |
OpenID Connect (OIDC) adalah protokol autentikasi yang dibangun di atas kerangka OAuth 2.0. Untuk informasi selengkapnya, lihat OpenID Connect. |
|
Scope |
Dalam OIDC, scope menentukan atribut pengguna (seperti email dan informasi profil) yang boleh diakses oleh aplikasi. Selama proses autentikasi, IdP dapat meminta pengguna memberikan izin agar aplikasi mengakses scope tertentu dari data penggunanya. |
Langkah 1: Buat instans IDaaS dan pengguna uji coba
-
Masuk ke Konsol EIAM dan buat instans Alibaba Cloud IDaaS.
CatatanInstans Alibaba Cloud IDaaS berfungsi sebagai sistem akun mandiri. Membuat instans sama dengan membuat sistem manajemen identitas independen.
-
Di halaman EIAM, klik nama instans Alibaba Cloud IDaaS.
-
Di panel navigasi sebelah kiri, pilih .
-
Di halaman Account, klik tab Account, lalu klik Create User.
-
Di panel Create User, masukkan informasi pengguna dan klik OK.
Langkah 2: Tambahkan dan konfigurasikan aplikasi OIDC
Aplikasi dalam instans Alibaba Cloud IDaaS Anda berfungsi sebagai antarmuka. Instans IDaaS dapat mengekspos antarmuka ini dengan berbagai cara untuk mengaktifkan SSO. Panduan ini menggunakan aplikasi OIDC untuk mendemonstrasikan prosesnya.
-
Di panel navigasi sebelah kiri Konsol EIAM, klik Application Management.
-
Di halaman Application Management, klik Add Application.
-
Di halaman Add Application, klik tab Standard Protocols. Di kartu OIDC, klik Add Application.
-
Di kotak dialog Add Application-OIDC, masukkan Application Name dan klik Add.
-
Di halaman detail OIDC Application, pilih .
-
Di tab konfigurasi SSO, atur Redirect URIs. Klik Show Advanced Settings, pilih informasi pengguna yang ingin diperoleh di bagian scopes, lalu klik Save.
Di panel navigasi sebelah kiri, klik Applications. Pilih aplikasi target Anda, klik tab Sign-in, lalu buka subtab SSO. scopes yang tersedia meliputi
openid,email,phone, danprofile.CatatanDalam contoh ini, Redirect URI diatur ke
http://{IP_address_of_the_ingress_gateway}/oauth2/callback. Ganti{IP_address_of_the_ingress_gateway}dengan alamat IP aktual gerbang masuk Anda. -
Di halaman detail OIDC Application, pilih , lalu klik Authorize.
-
Di kotak dialog Authorize, berikan izin kepada pengguna yang telah Anda buat di Langkah 1, lalu klik Confirm.
Setelah mengonfigurasi aplikasi OIDC, catat Issuer, client_id, dan client_secret. Informasi ini akan Anda perlukan untuk mengonfigurasi SSO di ASM.
-
Issuer: Dalam aplikasi OIDC Anda, nilai ini dapat diperoleh dari . Issuer: Peroleh nilai ini dari bagian Application Configuration Information di bagian bawah halaman Login Access > Single Sign-On dalam aplikasi OIDC Anda. Bidang ini digunakan untuk memverifikasi sumber penerbitan token dan juga merupakan
baseUrluntuk URL endpoint. -
client_id dan client_secret: Di halaman detail aplikasi OIDC, temukan nilai-nilai ini di bagian General.
Langkah 3: Deploy dan ekspos aplikasi uji coba
Panduan ini menggunakan aplikasi httpbin untuk pengujian. Aplikasi ini membantu memeriksa detail permintaan, sehingga mempermudah verifikasi informasi yang diperoleh dari IdP setelah login berhasil.
-
Gunakan YAML berikut untuk melakukan deploy aplikasi httpbin ke namespace
defaultkluster ACK Anda. -
Gunakan YAML berikut untuk mengonfigurasi resource Gateway untuk instans ASM Anda. Untuk informasi selengkapnya, lihat Kelola gateway Istio.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: ingressgateway namespace: istio-system spec: selector: app: istio-ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP -
Gunakan YAML berikut untuk menerapkan layanan virtual ke instans ASM Anda. Untuk informasi selengkapnya, lihat Kelola layanan virtual.
Layanan virtual ini mendefinisikan rute default ke aplikasi httpbin.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: ingressgateway-vs namespace: istio-system spec: gateways: - ingressgateway hosts: - '*' http: - name: default route: - destination: host: httpbin.default.svc.cluster.local port: number: 8000 -
Setelah mengonfigurasi Gateway dan layanan virtual, Anda dapat mengakses layanan httpbin dengan menjalankan perintah
curl -I http://{IP_address_of_the_ingress_gateway}:80.Contoh output:
curl -I http://{IP_address_of_the_ingress_gateway}:80 HTTP/1.1 200 OK server: istio-envoy date: Fri, 19 Aug 2022 07:39:58 GMT content-type: text/html; charset=utf-8 content-length: 9593 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 3
Langkah 4: Aktifkan otorisasi kustom dan konfigurasikan OIDC SSO
-
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih . Di halaman yang muncul, klik Define Custom Authorization Service.
-
Di halaman Define External Authorization Service, klik tab OIDC Authz and Authn Service, konfigurasi parameter, lalu klik Create.
CatatanGunakan informasi aplikasi OIDC yang Anda peroleh di Langkah 2. Anda dapat menggunakan alamat IP gerbang masuk sebagai Redirect URI untuk login. Untuk informasi selengkapnya tentang cookie secret, lihat Generating a Cookie Secret.
-
Gunakan KubeConfig kluster bidang data untuk menjalankan perintah berikut guna memperoleh nama domain layanan otorisasi eksternal OIDC.
kubectl get svc -n istio-system|grep oauth2proxy|awk -F' ' '{print $1}' -
Gunakan YAML berikut untuk membuat layanan virtual yang menerima permintaan autentikasi dari gerbang masuk.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: oauth2-vs namespace: istio-system spec: gateways: - ingressgateway hosts: - '*' http: - match: - uri: prefix: /oauth2 name: oauth2 route: - destination: host: # Nama domain layanan otorisasi eksternal yang diperoleh pada langkah sebelumnya. port: number: 4180PentingUntuk mencegah konflik, jangan buat layanan virtual lain yang mencocokkan awalan path
/oauth2.
Langkah 5: Buat kebijakan otorisasi
-
Di halaman detail instans ASM, pilih di panel navigasi sebelah kiri. Di halaman yang muncul, klik Create from YAML.
-
Di halaman Create, pilih Namespaces dan Scenario Template. Masukkan YAML berikut, lalu klik Create.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: oidc namespace: istio-system spec: action: CUSTOM provider: name: httpextauth-oidc # Nama layanan otorisasi kustom yang dibuat pada langkah sebelumnya. rules: - {} selector: matchLabels: istio: ingressgatewayCatatanKebijakan otorisasi ini berlaku untuk semua permintaan yang dikirim ke gerbang masuk.
Langkah 6: Verifikasi hasil
-
Di browser web, buka http://{IP_address_of_the_ingress_gateway}:80.
Halaman login OAuth2 Proxy muncul, berisi tombol Sign in with OpenID Connect. Hal ini menunjukkan bahwa OAuth2 Proxy telah berhasil dideploy dan terintegrasi dengan OpenID Connect, serta SSO aktif.
-
Klik Sign in with OpenID Connect.
Hasil yang diharapkan: Halaman login Alibaba Cloud IDaaS muncul. Halaman tersebut berisi bidang input untuk Account name, mobile number, or email dan Password, serta tombol Log On. Ini mengonfirmasi bahwa konfigurasi OIDC SSO berfungsi.
-
Di halaman login Alibaba Cloud IDaaS, masukkan kredensial pengguna uji coba yang Anda buat di Langkah 1 dan klik Log On.
Hasil yang diharapkan: Setelah berhasil login, halaman dokumentasi API Swagger httpbin.org untuk versi 0.9.2 muncul. Halaman tersebut menampilkan deskripsi layanan, "A simple HTTP Request & Response Service," dan mencantumkan grup API seperti HTTP Methods, Auth, Status codes, dan Request inspection. Ini mengonfirmasi bahwa konfigurasi SSO Alibaba Cloud IDaaS valid.
-
Klik Request inspection, lalu pilih /headers > Try it out > Execute.
Hasil yang diharapkan: Setelah menjalankan permintaan, server mengembalikan kode status
200 OK. Badan respons mencakup bidangAuthorizationyang berisi Bearer JWT, yang menunjukkan bahwa otorisasi JWT berfungsi.{ "headers": { "Accept": "application/json", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Authorization": "Bearer eyJraWQiOiJLRVkxM3d0ekhLSmdEbkFmd1lQR0RqemM5RFUzTkwSNXd1S0wiLC3hbGciOiJSUzI1NiJ9.eyJzdWIiOiJlc2VyVyX29xemw3Z3FQb2lrb2xtNG9xY29mMndlcGhtIiwinRpi-joiand0X2FhYWFkYXZ2aG12Y2JpdDRnbDVsNGNudDR5d2FwZDI3cnFkd2Z0eDI3cnFkZTByc2FtcnFkd2Z0ZDI3cnFkZTByc2FtIixxx.xxxb51hcGktY24taGFuZ3pobxxx.xxxMuY29xxx.3yiL2xxx.Fx3R1bjI1b3NkbG16Nmd0cWZxM2oycHpwZWZx-L2FwcF9tbDV0emFwc2w3em1mbzUzd2xxx.xxxaGFzaCI6IkUxcm9oRnlpR2FZYmJnTS.xxxtudHZpIiwiYXRf-IrODYgMTg2IDkxNzEgMjQ5MS.xxx.xxx.BanFbeM28p\nYp-aiEymtvy-QC-6VjohuSSi.xxx\nE9c3RTMntC66D7fxTGME2x.xxx.Et\nrwPRUTM-2AF74y2NVFtpNdkxbLenyz1duwTpeGANmgLGxxxJrZvKyNxBjAV6TZjGrUVVNICbU1_sg", "...": "..." } } -
Salin JWT dari token Bearer pada langkah sebelumnya dan uraikan dengan debugger JWT.
Untuk informasi selengkapnya, lihat JWT.io.
Hasil yang diharapkan: JWT yang diurai menunjukkan bahwa
algdalam HEADER adalahRS256. PAYLOAD berisi klaim standar ID Token OIDC, sepertisub,jti,iss(yang merupakan endpoint OIDC instans EIAM Anda),iat,nbf,exp,aud,at_hash,c_hash,email,email_verified,phone_number,phone_number_verified,name,preferred_username, danupdated_at. Ini mengonfirmasi bahwa JWT berisi informasi pengguna dari Alibaba Cloud IDaaS dan ASM telah berhasil memvalidasinya.