Topik ini menjelaskan cara menggunakan Open Authorization (OAuth) 2.0 untuk mengakses API Alibaba Cloud dari aplikasi asli, seperti aplikasi desktop atau seluler.
Prasyarat
Aplikasi asli telah dibuat dengan nama, cakupan OAuth, dan URL panggilan balik yang telah ditentukan. Untuk informasi lebih lanjut, lihat Buat Aplikasi. Aplikasi asli tidak menggunakan rahasia aplikasi karena berjalan di lingkungan yang tidak tepercaya.
Setelah membuat aplikasi asli, aplikasi tersebut dapat mengakses sumber daya Alibaba Cloud dalam akun Alibaba Cloud Anda.
Proses

Pengguna masuk ke aplikasi asli melalui browser.
Aplikasi asli mengarahkan pengguna ke layanan OAuth 2.0 Alibaba Cloud dan mengirimkan URL aplikasi ke browser.
CatatanJika pengguna belum masuk ke Alibaba Cloud, aplikasi asli akan mengarahkan pengguna ke halaman login Alibaba Cloud.
Pengguna masuk ke layanan OAuth 2.0 Alibaba Cloud melalui browser dan meminta kode otorisasi.
Layanan OAuth 2.0 Alibaba Cloud mengarahkan pengguna kembali ke aplikasi asli dan mengembalikan kode otorisasi ke browser.
Aplikasi asli meminta token akses yang sesuai dengan pengguna dari layanan OAuth 2.0 Alibaba Cloud. Kode otorisasi diperlukan dalam permintaan.
Untuk informasi lebih lanjut tentang cara mendapatkan token akses, lihat Dapatkan Token Akses.
Untuk informasi lebih lanjut tentang cara mendapatkan token akses baru, lihat Dapatkan Token Akses Baru.
Untuk informasi lebih lanjut tentang cara mencabut token refresh, lihat Cabut Token Refresh.
Layanan OAuth 2.0 Alibaba Cloud mengirimkan token akses yang diperoleh ke aplikasi asli.
Aplikasi asli menggunakan token akses untuk mengakses API Alibaba Cloud.
CatatanToken akses berisi informasi identitas pengguna dan dapat digunakan oleh aplikasi asli untuk mengakses sumber daya pengguna.
PKCE
Aplikasi asli dapat menggunakan spesifikasi Proof Key for Code Exchange (PKCE) untuk mendapatkan kode otorisasi dan token akses. Untuk informasi lebih lanjut, lihat Proof Key for Code Exchange oleh Klien Publik OAuth.
Spesifikasi PKCE dapat digunakan untuk mengurangi serangan intersepsi terhadap kode otorisasi.
Aplikasi asli membuat dan mencatat string acak bernama
code_verifier.CatatanString
code_verifieradalah string kriptografi entropi tinggi. String harus memiliki panjang 43 hingga 128 karakter, dan dapat berisihuruf, angka, tanda hubung (-), titik (.), garis bawah (_), dan tilde (~).Aplikasi asli membuat string
code_challengeberdasarkan string code_verifier dan metodetransformasiyang dipilih. Kemudian, aplikasi asli mengirimkan permintaan untuk mendapatkan kode otorisasi. Stringcode_challengedan metode transformasi untuk membuat stringcode_challengeharus disertakan dalam permintaan.code_challenge = transform(code_verifier, [Plain|S256])Metode Transformasi
Nilai
plainJika metode
transformasiadalahplain, nilai stringcode_challengesama dengan nilai stringcode_verifier.S256Jika metode
transformasiadalahS256, nilai stringcode_challengesama dengan nilai hash SHA-256 dari stringcode_verifier.code_challenge=BASE64URL-Encode(SHA256(ASCII(code_verifier)))CatatanMasukan algoritma hash adalah string ASCII dari
code_verifier. Keluaran algoritma hash harus dienkripsi menggunakan Base64URL.Berikut ini adalah contoh cara menghitung string
code_challenge:Jika metode transformasi S256 digunakan dan nilai string
code_verifieradalah dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk, maka nilai stringcode_challengeadalah E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM.Ketika aplikasi asli menggunakan kode otorisasi yang diperoleh untuk meminta token akses, server menentukan apakah akan menerbitkan token akses dengan menghitung string code_challenge berdasarkan string code_verifier.
Kode otorisasi yang diperoleh berisi string
code_verifier. Server menghitung stringcode_challengeberdasarkan stringcode_verifierdan metode transformasi yang dipilih oleh aplikasi asli. Kemudian, server membandingkan string code_challenge dengan stringcode_challengeyang disediakan oleh aplikasi asli. Jika nilai kedua string code_challenge sama, server menerbitkan token akses yang diminta.
Dapatkan token akses
Aplikasi asli mengarahkan pengguna ke layanan OAuth 2.0 Alibaba Cloud untuk mendapatkan kode otorisasi.
Titik akhir yang digunakan untuk mendapatkan kode otorisasi adalah
https://signin.alibabacloud.com/oauth2/v1/auth.Tabel 1 Parameter Permintaan Parameter
Diperlukan
Deskripsi
client_id
Ya
ID aplikasi asli.
redirect_uri
Ya
Redirect Uniform Resource Identifier (URI) dari aplikasi asli.
response_type
Ya
Tipe respons. Atur nilainya menjadi code.
scope
Tidak
Daftar ruang lingkup OAuth yang dipisahkan oleh spasi. Jika Anda membiarkan parameter ini kosong, aplikasi asli meminta akses ke semua ruang lingkup.
state
Tidak
Nilai yang digunakan baik dalam permintaan maupun respons. Anda dapat mengonfigurasi parameter state sebagai nonce untuk mencegah serangan pemalsuan permintaan lintas situs (CSRF) atau menyimpan status antara aplikasi asli dan layanan OAuth 2.0 Alibaba Cloud. Jika Anda menyetel parameter ini ke string acak, layanan OAuth 2.0 Alibaba Cloud akan mengembalikan nilai state dalam respons untuk digunakan selanjutnya.
code_challenge_method
Tidak
Metode transformasi. Jika Anda membiarkan parameter ini kosong, metode default plain digunakan.
code_challenge
Tidak
Parameter ini digunakan untuk mengamankan pemberian kode otorisasi berdasarkan spesifikasi PKCE dari aplikasi asli. Parameter ini dihasilkan dengan mentranskode dan mengenkripsi string code_verifier berdasarkan nilai parameter code_challenge_method.
CatatanJika Anda membiarkan parameter ini kosong, spesifikasi PKCE tidak dapat digunakan, dan Anda tidak perlu menentukan string code_verifier ketika aplikasi asli menggunakan kode otorisasi untuk meminta token akses. Jika aplikasi lain mencegat kode otorisasi, aplikasi tersebut dapat menggunakan kode ini untuk meminta token akses.
prompt
Tidak
Menentukan apakah server perlu meminta pengguna untuk memberikan izin yang diperlukan kepada aplikasi web.
Jika Anda menentukan parameter ini, pengguna harus memberikan izin yang diperlukan kepada aplikasi web. Pengguna harus memberikan izin yang diperlukan kepada aplikasi web meskipun akun Alibaba Cloud sudah memberikan izin yang diperlukan kepada aplikasi web. Jika Anda membiarkan parameter ini kosong, hanya akun Alibaba Cloud yang diminta untuk memberikan izin yang diperlukan kepada aplikasi web pertama kali akun Alibaba Cloud menggunakan aplikasi web.
Atur nilainya menjadi
admin_consent. Nilai ini menentukan bahwa server menampilkan halaman otorisasi sebelum server mengembalikan kode otorisasi yang diminta ke klien.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
GET HTTP/1.1 302 Found Location: meeting://authorize/?code=ABAFDGDFXYZW888&state=123456****Aplikasi asli menggunakan kode otorisasi untuk meminta token akses yang sesuai dengan pengguna dari layanan OAuth 2.0 Alibaba Cloud.
Titik akhir yang digunakan untuk meminta token akses adalah
https://oauth.alibabacloud.com/v1/token.Tabel 2 Parameter Permintaan Parameter
Diperlukan
Deskripsi
code
Ya
Kode otorisasi yang diperoleh oleh aplikasi asli.
client_id
Ya
ID aplikasi asli.
redirect_uri
Ya
URI yang digunakan untuk mendapatkan kode otorisasi.
grant_type
Ya
Atur nilainya menjadi authorization_code.
code_verifier
Tidak
String code_verifier yang Anda gunakan untuk membuat string code_challenge dalam permintaan untuk kode otorisasi.
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_wW1gFWFOEjXkTabel 3 Parameter Respons Parameter
Deskripsi
access_token
Token akses yang dikembalikan. Aplikasi asli dapat menggunakan token akses untuk mengakses API Alibaba Cloud.
expires_in
Sisa masa berlaku token akses. Satuan: detik.
token_type
Tipe token akses. Nilainya adalah Bearer.
id_token
Token ID. Nilainya adalah JSON Web Token (JWT). Jika openid termasuk dalam nilai parameter scope dalam permintaan yang diinisiasi untuk mendapatkan kode otorisasi, token ID dikembalikan.
refresh_token
Token refresh. Aplikasi asli dapat menggunakan token refresh untuk mendapatkan token akses baru tanpa perlu menentukan token akses asli.
Contoh Respons
{ "access_token": "eyJraWQiOiJrMTIzNCIsImVuYyI6****", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "Ccx63VVeTn2dxV7ovXXfLtAqLLERA****", "id_token": "eyJhbGciOiJIUzI1****" }
Dapatkan token akses baru
Titik akhir yang digunakan untuk meminta token akses adalah https://oauth.alibabacloud.com/v1/token.
Parameter | Diperlukan | Deskripsi |
refresh_token | Ya | Token refresh yang diperoleh menggunakan kode otorisasi. |
client_id | Ya | ID aplikasi asli. |
grant_type | Ya | Atur nilainya menjadi refresh_token. |
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_tokenParameter | Deskripsi |
access_token | Token akses baru. Aplikasi asli dapat menggunakan token akses baru untuk mengakses API Alibaba Cloud. |
expires_in | Sisa masa berlaku token akses. Satuan: detik. |
token_type | Tipe token akses. Nilainya adalah Bearer. |
Contoh Respons
{
"access_token": "eyJraWQiOiJrMTIzNCIsImVuYyI6****",
"token_type": "Bearer",
"expires_in": 3600,
} Nilai dalam respons ini sama dengan nilai dalam respons contoh sebelumnya. Respons ini tidak berisi parameter refresh_token dan id_token.
Cabut token refresh
Ketika pengguna keluar dari aplikasi asli atau menghapus akun dari aplikasi asli, Anda harus mencabut token refresh aplikasi tersebut.
Titik akhir yang digunakan untuk mencabut token refresh adalah https://oauth.alibabacloud.com/v1/revoke.
Parameter | Diperlukan | Deskripsi |
token | Ya | Token refresh yang ingin Anda cabut. |
client_id | Ya | ID aplikasi asli. |