Topik ini menjelaskan cara menggunakan alur kode otorisasi OAuth 2.0 dengan Proof Key for Code Exchange (PKCE) agar aplikasi asli (seperti aplikasi desktop atau seluler) dapat mengakses API Alibaba Cloud secara aman atas nama pengguna.
Prasyarat
Anda telah membuat aplikasi asli OAuth 2.0 di konsol Resource Access Management (RAM) dan menentukan URI pengalihan.
Anda telah menyimpan ID aplikasi Anda secara aman. Aplikasi asli tidak menggunakan client secret.
Ikhtisar alur otorisasi
Alur kode otorisasi dengan PKCE merupakan metode yang direkomendasikan dan paling aman untuk aplikasi asli karena menambahkan lapisan keamanan guna mencegah serangan penyadapan kode otorisasi.
Hasilkan code_verifier dan code_challenge: Aplikasi asli Anda menghasilkan string acak kriptografi berentropi tinggi (
code_verifier) dan versi transformasinya (code_challenge).Pengguna memulai login: Aplikasi membuka browser ke titik akhir otorisasi Alibaba Cloud, mengirimkan
code_challengebeserta metode transformasinya.Pengguna memberikan persetujuan: Pengguna masuk ke Akun Alibaba Cloud mereka dan memberikan izin yang diminta oleh aplikasi.
Menerima kode otorisasi: Server otorisasi mengalihkan pengguna kembali ke URL pengalihan yang ditentukan aplikasi dengan kode otorisasi sekali pakai.
Tukar kode dengan token: Aplikasi Anda mengirim permintaan ke titik akhir token Alibaba Cloud untuk menukar kode otorisasi dan
code_verifierasli guna mendapatkan token akses dan token penyegaran. Server memvalidasicode_verifierterhadapcode_challengedari langkah pertama.Akses resource yang dilindungi: Aplikasi Anda menggunakan token akses untuk melakukan panggilan API yang sah ke Layanan Alibaba Cloud.
Langkah 1: Minta kode otorisasi dengan PKCE
Untuk memulai alur, aplikasi Anda harus terlebih dahulu menghasilkan parameter PKCE, lalu mengarahkan pengguna ke titik akhir otorisasi.
1. Hasilkan parameter PKCE
Pertama, aplikasi Anda membuat dan mencatat code_verifier, yaitu string acak kriptografi berentropi tinggi dengan panjang antara 43 hingga 128 karakter.
Selanjutnya, aplikasi membuat code_challenge dengan mentransformasikan code_verifier menggunakan salah satu metode berikut:
Metode transformasi | Deskripsi |
|
|
| (Direkomendasikan) |
Contoh menggunakan S256:
Jika
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXkMaka
code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
2. Alihkan ke titik akhir otorisasi
Aplikasi Anda membuka browser sistem ke titik akhir otorisasi Alibaba Cloud (https://signin.alibabacloud.com/oauth2/v1/auth) dengan parameter berikut.
Parameter | Wajib | Deskripsi |
client_id | Ya | ID aplikasi asli Anda. |
redirect_uri | Ya | URI pengalihan tempat pengguna dikirim setelah memberikan persetujuan. URI ini harus persis sesuai dengan salah satu URI yang terdaftar untuk aplikasi Anda. |
response_type | Ya | Harus diatur ke |
scope | Tidak | Daftar cakupan OAuth yang diminta aplikasi Anda, dipisahkan spasi. Jika dihilangkan, semua cakupan yang dikonfigurasi untuk aplikasi akan diminta. |
state | Tidak | Nilai tak transparan yang digunakan untuk mempertahankan status antara permintaan dan callback. Sangat disarankan untuk menggunakan string acak yang tidak dapat ditebak guna mencegah serangan Cross-Site Request Forgery (CSRF). |
code_challenge_method | Tidak | Metode transformasi yang digunakan. Nilai valid: Nilai default: |
code_challenge | Tidak | String Catatan Jika Anda menghilangkan parameter ini, PKCE tidak digunakan, sehingga alur menjadi rentan terhadap serangan penyadapan kode otorisasi. Dalam kasus ini, penyerang yang menyadap kode otorisasi dapat menukarnya dengan token akses. |
prompt | Tidak | Atur parameter ini ke |
Contoh permintaan
https://signin.alibabacloud.com/oauth2/v1/auth?
client_id=98989****
&redirect_uri=meeting%3A%2F%2Fauthorize%2F
&response_type=code
&scope=openid%20%2Fworksuite%2Fuseraccess
&state=123456****
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSst****
&code_challenge_method=S256Contoh respons
Jika pengguna memberikan persetujuan, server otorisasi mengalihkan browser pengguna ke redirect_uri Anda dengan kode otorisasi dan state yang ditambahkan sebagai parameter kueri.
GET HTTP/1.1 302 Found
Location: meeting://authorize/?code=ABAFDGDFXYZW888&state=123456**** Langkah 2: Tukar kode otorisasi dengan token akses
Setelah aplikasi Anda menerima kode otorisasi, aplikasi harus mengirim permintaan POST dari server backend-nya ke titik akhir token Alibaba Cloud (https://oauth.alibabacloud.com/v1/token) untuk menukar kode otorisasi dengan token.
Parameter permintaan (isi POST)
Parameter | Wajib | Deskripsi |
code | Ya | Kode otorisasi yang diterima di Langkah 1. |
client_id | Ya | ID aplikasi asli Anda. |
redirect_uri | Ya | URI pengalihan yang sama seperti yang digunakan dalam permintaan Langkah 1. |
grant_type | Ya | Harus diatur ke |
code_verifier | Tidak | String |
Contoh permintaan
POST /v1/token HTTP/1.1
Host: oauth.alibabacloud.com
Content-Type: application/x-www-form-urlencoded
code=ABAFDGDFXYZW888&
client_id=98989****
redirect_uri=meeting://authorize/&
grant_type=authorization_code&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk Contoh respons
Jika permintaan berhasil, titik akhir token mengembalikan objek JSON yang berisi token.
{
"access_token": "eyJraWQiOiJrMTIzNCIsImVuYyI6****",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "Ccx63VVeTn2dxV7ovXXfLtAqLLERA****",
"id_token": "eyJhbGciOiJIUzI1****"
} Langkah 3 (Opsional): Refresh token akses
Anda dapat menggunakan token penyegaran untuk mendapatkan token akses baru tanpa meminta pengguna login kembali.
Titik akhir: https://oauth.alibabacloud.com/v1/token
Parameter permintaan (isi POST)
Parameter | Wajib | Deskripsi |
refresh_token | Ya | Token penyegaran yang sebelumnya Anda terima. |
client_id | Ya | ID aplikasi asli Anda. |
grant_type | Ya | Harus diatur ke |
Contoh permintaan
POST /v1/token HTTP/1.1
Host: oauth.alibabacloud.com
Content-Type: application/x-www-form-urlencoded
refresh_token=Ccx63VVeTn2dxV7ovXXfLtAqLLERAH****
client_id=98989****
grant_type=refresh_tokenContoh respons
Titik akhir token mengembalikan token akses baru.
{
"access_token": "eyJraWQiOiJrMTIzNCIsImVuYyI6****",
"token_type": "Bearer",
"expires_in": 3600,
} Cabut token penyegaran
Saat pengguna logout dari aplikasi Anda atau memutuskan akun mereka, Anda harus mencabut token penyegaran terkait agar tidak berlaku lagi.
Titik akhir: https://oauth.alibabacloud.com/v1/revoke
Parameter permintaan (isi POST)
Parameter | Wajib | Deskripsi |
token | Ya | Token penyegaran yang ingin Anda cabut. |
client_id | Ya | ID aplikasi asli Anda. |
Permintaan yang berhasil akan mengembalikan status HTTP 200 OK.