Topik ini menjelaskan cara mengimplementasikan single sign-on (SSO) ke aplikasi dalam Service Mesh (ASM).
Prasyarat
Sebuah instance ASM Edisi Perusahaan telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instance ASM.
Sebuah kluster terkelola ACK telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster Terkelola ACK.
Injeksi proxy sidecar otomatis diaktifkan untuk namespace default. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.
Informasi latar belakang
Dalam banyak kasus, Anda harus masuk untuk mengakses aplikasi karena mekanisme kontrol akses. Sebuah sistem mungkin memiliki banyak aplikasi. SSO memungkinkan Anda mengakses semua aplikasi tersebut dengan satu set kredensial log masuk. Anda dapat mengirimkan kredensial sekali dan mendapatkan akses ke semua aplikasi dalam instance ASM menggunakan layanan otorisasi kustom tanpa modifikasi kode apa pun.
Fitur ini membantu mengurangi biaya transformasi aplikasi serta operasi dan pemeliharaan. Dalam contoh ini, sebuah instance Alibaba Cloud IDaaS digunakan sebagai penyedia identitas (IdP) untuk mengimplementasikan SSO ke semua aplikasi dalam instance ASM. Anda tidak perlu mengimplementasikan mekanisme autentikasi untuk aplikasi dalam mesh. Sebagai gantinya, Anda dapat menyerahkan autentikasi ke IdP dengan mendaftarkan instance Alibaba Cloud IDaaS atau IdP OpenID Connect (OIDC) apa pun dalam layanan otorisasi kustom di ASM. Setelah pengguna diautentikasi oleh IdP, IdP mengirimkan detail autentikasi dan permintaan pengguna ke aplikasi sehingga pengguna tepercaya dapat mengakses aplikasi tersebut.
Konsep
Konsep | Deskripsi |
IdP | IdP adalah sistem yang menyimpan dan memverifikasi identitas digital. Misalnya, Anda dapat menggunakan akun dan kata sandi untuk memverifikasi identitas Anda. Jika Anda menggunakan akun dan kata sandi Alipay untuk masuk ke Youku, Alipay adalah IdP. |
OIDC | OIDC adalah protokol autentikasi identitas standar berbasis protokol OAuth 2.0. Untuk informasi lebih lanjut, lihat situs resmi OpenID. |
Ruang Lingkup | Ruang lingkup adalah konsep dalam OIDC. Setiap IdP menyimpan berbagai jenis informasi pengguna, seperti alamat email. Setiap jenis sesuai dengan ruang lingkup. Saat Anda menggunakan IdP untuk memverifikasi identitas Anda untuk mengakses aplikasi, aplikasi hanya diizinkan untuk mendapatkan jenis informasi tertentu saja. |
Langkah 1: Buat instance IDaaS dan akun uji
Masuk ke konsol IDaaS dan buat instance IDaaS.
Instance IDaaS dianggap sebagai sistem akun independen.
Di tab IDaaS halaman EIAM, klik ID dari instance IDaaS.
Di panel navigasi sisi kiri, pilih .
Di tab Accounts pada halaman Accounts, klik Create User.
Di panel Create User, konfigurasikan parameter dan klik Confirm.
Langkah 2: Tambahkan dan konfigurasikan aplikasi OIDC
Anda dapat menambahkan aplikasi ke instance IDaaS sebagai antarmuka untuk mengekspos instance IDaaS guna mengimplementasikan SSO. IDaaS mendukung berbagai jenis aplikasi. Dalam contoh ini, aplikasi OIDC digunakan.
Di panel navigasi sisi kiri pada halaman detail instance IDaaS, klik Applications.
Di halaman Applications, klik Add Application.
Di halaman Add Application, klik tab Standard Protocols. Di kartu OIDC, klik Add Application.
Di kotak dialog Add Application - OIDC yang muncul, masukkan nama aplikasi dan klik Add.
Di halaman detail aplikasi OIDC, klik Sign-in lalu klik tab SSO.
Di tab SSO, atur Redirect URIs. Klik Show Advanced Settings. Di bagian scopes, pilih jenis informasi yang dapat diperoleh aplikasi. Lalu, klik Save.
CatatanDalam contoh ini, atur parameter Redirect URIs menjadi
http://${Alamat IP instance CLB yang terikat ke gateway ingress}/oauth2/callback. Ganti placeholder${}dengan alamat IP sebenarnya dari instance SLB yang terikat ke gateway ingress.Di halaman detail aplikasi OIDC, klik Masuk lalu klik tab Berikan Izin Aplikasi. Di tab Berikan Izin Aplikasi, klik Authorize.
Di kotak dialog Authorize, otorisasi akun yang Anda buat di Langkah 1 dan klik Confirm.
Aplikasi OIDC telah dikonfigurasi. Catat nilai-nilai dari Penerbit, client_id, dan client_secret dari aplikasi. Nilai-nilai ini akan digunakan saat Anda mengonfigurasi SSO di instance ASM.
Penerbit: Untuk mendapatkan nilai Penerbit, navigasikan ke tab SSO di halaman detail aplikasi OIDC, dan lihat bagian Pengaturan Aplikasi.

client_id dan client_secret: Untuk mendapatkan nilai client_id dan client_secret, buka tab General di halaman detail aplikasi OIDC.

Langkah 3: Terapkan aplikasi uji dan ekspos menggunakan gateway ingress
Dalam contoh ini, aplikasi httpbin diterapkan. Aplikasi ini memungkinkan Anda melihat konten permintaan yang berisi informasi yang diperoleh dari IdP selama autentikasi log masuk.
Buat file YAML yang berisi konten berikut untuk menerapkan aplikasi httpbin di namespace default kluster ACK:
apiVersion: v1 kind: ServiceAccount metadata: name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin labels: app: httpbin service: httpbin spec: ports: - name: http port: 8000 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: serviceAccountName: httpbin containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80Buat file YAML yang berisi konten berikut untuk mengonfigurasi gateway Istio untuk instance ASM: Untuk informasi lebih lanjut, 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: HTTPBuat file YAML yang berisi konten berikut untuk membuat layanan virtual untuk instance ASM. Untuk informasi lebih lanjut, lihat Kelola Layanan Virtual.
Layanan virtual menentukan 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: 8000Jalankan perintah
curl -I http://${Alamat IP gateway ingress:80}untuk mengakses aplikasi httpbin.Contoh keluaran:

Langkah 4: Daftarkan layanan otorisasi kustom dan konfigurasikan SSO OIDC di instance ASM
Masuk ke konsol ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sisi kiri, pilih . Di halaman yang muncul, klik Define Custom Authorization Service.
Di halaman Register Custom Authorization Service, klik tab OIDC Authz and Authn Service, konfigurasikan parameter, lalu klik Create.
Konfigurasikan parameter berdasarkan informasi aplikasi OIDC yang Anda buat di Langkah 2. Anda dapat mengarahkan percobaan log masuk ke alamat IP gateway ingress. Untuk informasi lebih lanjut tentang rahasia cookie, lihat Membuat Rahasia Cookie.
Gunakan file kubeconfig untuk terhubung ke kluster ACK di bidang data, dan jalankan perintah berikut untuk mendapatkan nama domain layanan otorisasi OIDC:
kubectl get svc -n istio-system|grep oauth2proxy|awk -F' ' '{print $1}'Buat layanan virtual untuk menerima permintaan autentikasi dari gateway ingress. Contoh kode berikut menunjukkan cara membuat layanan virtual.
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 OIDC, yang Anda peroleh di langkah sebelumnya. port: number: 4180PentingJangan atur awalan pencocokan ke
/oauth2dalam aturan routing yang didefinisikan oleh layanan virtual lainnya. Ini mencegah konflik antara layanan virtual.
Langkah 5: Buat kebijakan otorisasi
Di halaman detail instance ASM, pilih di panel navigasi sisi kiri. Di halaman yang muncul, klik Create from YAML.
Di halaman Create, pilih namespace istio-system, pilih template, tentukan kode YAML berikut di editor kode, 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 yang Anda daftarkan di Langkah 4. rules: - {} selector: matchLabels: istio: ingressgatewayCatatanKebijakan otorisasi ini berlaku untuk semua permintaan yang dikirim ke gateway ingress.
Langkah 6: Verifikasi SSO
Kunjungi http://${Alamat IP gateway ingress:80} di browser.
Jika halaman berikut muncul, itu menunjukkan bahwa SSO berfungsi.

Klik Sign in with OpenID Connect.
Hasil yang diharapkan:

Di halaman log masuk Alibaba Cloud IDaaS, masukkan akun uji dan kata sandi yang Anda buat di Langkah 1, dan klik Log On.
Hasil yang diharapkan:

Klik Request inspection lalu pilih .
Hasil yang diharapkan:

Parsing JSON Web Token (JWT) di JWT Debugger. JWT digunakan untuk mengautentikasi permintaan dan ditampilkan setelah Bearer dalam respons yang dikembalikan di langkah sebelumnya.
Untuk informasi lebih lanjut tentang JWT Debugger, lihat situs resmi JWT.
Hasil yang diharapkan:
Informasi dalam gambar di atas muncul setelah JWT diparsing, termasuk informasi pengguna yang disimpan di IDaaS. JWT diverifikasi oleh ASM.