
Halo semuanya! Saya Nikita Stupin, Spesialis Keamanan Informasi, Mail.Ru Mail. Belum lama ini, saya melakukan penelitian kerentanan pada ponsel OAuth 2.0. Untuk membuat skema OAuth 2.0 seluler yang aman, tidak cukup menerapkan standar dalam bentuk murni dan memeriksa redirect_uri. Penting untuk mempertimbangkan spesifikasi aplikasi seluler dan menerapkan mekanisme perlindungan tambahan.
Pada artikel ini saya ingin berbagi dengan Anda pengetahuan tentang serangan pada ponsel OAuth 2.0, tentang metode perlindungan dan implementasi aman dari protokol ini. Semua komponen perlindungan yang diperlukan, yang akan saya bahas di bawah, diimplementasikan di SDK terbaru untuk klien seluler Mail.Ru Mail.
Sifat dan fungsi OAuth 2.0
OAuth 2.0 adalah protokol otorisasi yang menjelaskan bagaimana aman bagi layanan klien untuk mengakses sumber daya pengguna pada penyedia layanan. Pada saat yang sama, OAuth 2.0 menyelamatkan pengguna dari keharusan memasukkan kata sandi di luar penyedia layanan: seluruh proses dikurangi menjadi mengklik tombol "Saya setuju untuk memberikan akses ke ...".
Penyedia dalam hal OAuth 2.0 adalah layanan yang memiliki data pengguna dan, dengan izin pengguna, menyediakan layanan pihak ketiga (klien) dengan akses yang aman ke data ini. Klien adalah aplikasi yang ingin menerima data pengguna dari penyedia.
Beberapa waktu setelah rilis protokol OAuth 2.0, pengembang biasa mengadaptasinya untuk otentikasi, meskipun awalnya tidak dimaksudkan untuk ini. Otentikasi menggeser vektor serangan dari data pengguna yang disimpan di penyedia layanan ke akun pengguna layanan pengguna.
Itu tidak terbatas pada otentikasi saja. Di era aplikasi seluler dan peninggian konversi, memasuki aplikasi dengan satu tombol menjadi sangat menggoda. Pengembang menempatkan OAuth 2.0 di rel seluler. Secara alami, sedikit orang yang memikirkan keamanan dan spesifikasi aplikasi seluler: sekali dan lagi, dan dalam produksi. Namun, OAuth 2.0 umumnya tidak berfungsi dengan baik di luar aplikasi web: masalah yang sama diamati di kedua aplikasi seluler dan desktop.
Mari kita cari tahu cara membuat OAuth 2.0 mobile yang aman.
Bagaimana cara kerjanya?
Ingat bahwa pada perangkat seluler, klien mungkin bukan peramban, tetapi aplikasi seluler tanpa backend. Karena itu, kami dihadapkan pada dua masalah keamanan utama untuk seluler OAuth 2.0:
- Klien tidak dipercaya.
- Perilaku pengalihan dari browser ke aplikasi seluler tergantung pada pengaturan dan aplikasi yang telah diinstal pengguna.
Aplikasi seluler adalah klien publik
Untuk memahami akar masalah pertama, mari kita lihat bagaimana OAuth 2.0 bekerja jika terjadi interaksi server-ke-server, dan kemudian membandingkannya dengan OAuth 2.0 jika terjadi interaksi klien-ke-server.
Dalam kedua kasus, semuanya dimulai dengan fakta bahwa klien layanan mendaftar dengan penyedia layanan dan menerima
client_id
dan, dalam beberapa kasus,
client_secret
. Nilai
client_id
bersifat publik dan diperlukan untuk mengidentifikasi layanan klien, tidak seperti
client_secret
, yang nilainya bersifat pribadi. Proses pendaftaran dijelaskan secara lebih rinci dalam
RFC 7591 .
Diagram di bawah ini menunjukkan operasi OAuth 2.0 dalam komunikasi server-ke-server.
Gambar diambil dari https://tools.ietf.org/html/rfc6749#section-1.2Ada 3 tahapan utama protokol OAuth 2.0:
- [Langkah-langkah AC] Dapatkan Kode Otorisasi (selanjutnya hanya
code
). - [Langkah DE]
code
pertukaran untuk access_token
. - Akses sumber daya menggunakan
access_token
.
Mari kita periksa penerimaan kode secara lebih rinci:
- [Langkah A] Klien layanan mengarahkan pengguna ke penyedia layanan.
- [Langkah B] Penyedia layanan meminta izin dari pengguna untuk memberikan data ke layanan klien (panah B ke atas). Pengguna menyediakan akses ke data (panah B ke kanan).
- [Langkah C] Penyedia layanan mengembalikan
code
ke browser pengguna, yang mengarahkan ulang code
layanan klien.
Mari kita
access_token
mendapatkan
access_token
lebih rinci:
- [Langkah D] Server klien mengirimkan permintaan untuk
access_token
. Permintaan tersebut meliputi: code
, client_secret
dan redirect_uri
. - [Langkah E] Dalam hal
code
valid, client_secret
dan redirect_uri
, client_secret
disediakan.
Permintaan untuk
access_token
dilakukan sesuai dengan skema server-ke-server, oleh karena itu, secara umum, untuk mencuri
client_secret
penyerang harus meretas server-klien-server atau server penyedia layanan.
Sekarang mari kita lihat seperti apa skema OAuth 2.0 pada perangkat seluler tanpa backend (interaksi klien-ke-server).
Gambar diambil dari https://tools.ietf.org/html/rfc8252#section-4.1Skema umum dibagi menjadi 3 langkah utama yang sama:
- [langkah 1-4 dalam gambar] Dapatkan
code
. - [langkah 5-6 dalam gambar]
code
pertukaran untuk access_token
. - Akses sumber daya menggunakan
access_token
.
Namun, dalam hal ini, aplikasi seluler juga bertindak sebagai server, yang berarti
client_secret
akan
client_secret
ke dalam aplikasi. Ini mengarah pada fakta bahwa pada perangkat seluler tidak mungkin menyimpan rahasia
lient_secret
dari penyerang.
client_secret
dua cara untuk mendapatkan
client_secret
ke dalam aplikasi: untuk menyaring lalu lintas dari aplikasi ke server atau merekayasa balik aplikasi. Kedua metode ini mudah diterapkan, sehingga
client_secret
berguna di perangkat seluler.
Mengenai skema client-to-server, Anda mungkin memiliki pertanyaan: "mengapa tidak segera mendapatkan
access_token
?". Kelihatannya, mengapa kita perlu langkah ekstra? Selain itu, ada skema
Hibah Implisit di mana klien segera menerima
access_token
. Meskipun dapat digunakan dalam beberapa kasus, kita akan melihat di bawah ini bahwa
Implisit Grant tidak cocok untuk OAuth 2.0 seluler yang aman.
Redirect di perangkat seluler
Secara umum, untuk pengalihan dari browser ke aplikasi pada perangkat seluler,
skema URI Khusus dan mekanisme
AppLink digunakan. Tidak satu pun dari mekanisme ini dalam bentuk murni yang dapat diandalkan seperti pengalihan browser.
Skema URI khusus (atau tautan dalam) digunakan sebagai berikut: pengembang menentukan skema aplikasi sebelum perakitan. Skema dapat arbitrer, sementara pada perangkat yang sama beberapa aplikasi dengan skema yang sama dapat diinstal. Semuanya cukup sederhana ketika setiap aplikasi pada perangkat sesuai dengan satu aplikasi. Tetapi bagaimana jika dua aplikasi mendaftarkan sirkuit yang sama pada perangkat yang sama? Bagaimana sistem operasi menentukan mana dari dua aplikasi yang akan dibuka ketika mengakses Skema URI Khusus? Android akan menampilkan jendela dengan pilihan aplikasi tempat Anda ingin membuka tautan. Di iOS,
perilaku tidak didefinisikan , yang berarti bahwa salah satu dari kedua aplikasi dapat dibuka. Dalam kedua kasus, penyerang
dapat mencegat kode atau access_token .
AppLink, berbeda dengan Skema URI Khusus, dijamin untuk membuka aplikasi yang tepat, tetapi mekanisme ini memiliki beberapa kelemahan:
- Setiap klien layanan harus secara independen melewati prosedur verifikasi .
- Pengguna Android dapat mematikan AppLink untuk aplikasi tertentu di pengaturan.
- Android di bawah 6.0 dan iOS di bawah 9.0 tidak mendukung AppLink.
Kerugian AppLink di atas, pertama, meningkatkan ambang entri untuk layanan klien potensial, dan kedua, dapat mengarah pada fakta bahwa dalam keadaan tertentu pengguna tidak akan bekerja OAuth 2.0. Ini membuat AppLink tidak cocok untuk mengganti pengalihan browser dalam protokol OAuth 2.0.
Oke, apa yang harus diserang?
Masalah ponsel OAuth 2.0 juga memunculkan serangan spesifik. Mari kita lihat siapa mereka dan bagaimana mereka bekerja.
Serangan Intersepsi Kode Otorisasi
Data awal: aplikasi yang sah (klien OAuth 2.0) dan aplikasi jahat yang mendaftarkan skema yang sama dengan yang sah diinstal pada perangkat pengguna. Gambar di bawah ini menunjukkan skema serangan.
Gambar diambil dari https://tools.ietf.org/html/rfc7636#section-1Inilah masalahnya: pada langkah 4, browser mengembalikan
code
ke aplikasi melalui Skema URI Kustom, sehingga
code
dapat dicegat oleh malware (karena terdaftar skema yang sama dengan aplikasi yang sah). Setelah itu, malware mengubah
code
menjadi
access_token
dan mendapatkan akses ke data pengguna.
Bagaimana cara melindungi diri sendiri? Dalam beberapa kasus, mekanisme komunikasi antarproses dapat digunakan, kita akan membicarakannya di bawah ini. Dalam kasus umum, Anda perlu menerapkan skema yang disebut
Kunci Bukti untuk Pertukaran Kode . Esensinya tercermin dalam diagram di bawah ini.
Gambar diambil dari https://tools.ietf.org/html/rfc7636#section-1.1Dalam permintaan dari klien, ada beberapa parameter tambahan:
code_verifier
,
code_challenge
(pada
t(code_verifier)
) dan
code_challenge_method
(pada diagram
t_m
).
Code_verifier
adalah angka acak
dengan panjang setidaknya 256 bit yang
hanya digunakan sekali . Artinya, untuk
setiap permintaan
code
klien harus membuat
code_verifier
baru.
Code_challenge_method
adalah nama fungsi konversi, paling sering SHA-256.
Code_challenge
adalah
code_verifier
yang konversi
code_challenge_method
telah
code_challenge_method
dan dikodekan dalam URL Safe Base64.
Konversi
code_verifier
ke
code_challenge
diperlukan untuk melindungi terhadap serangan vektor berdasarkan intersepsi
code_verifier
(misalnya, dari log sistem perangkat) ketika meminta
code
.
Jika perangkat pengguna
tidak mendukung SHA-256, maka
penurunan versi diizinkan hingga konversi code_verifier hilang . Dalam semua kasus lain, Anda harus menggunakan SHA-256.
Skema ini bekerja sebagai berikut:
- Klien menghasilkan
code_verifier
dan mengingatnya. - Klien memilih
code_challenge_method
dan mendapatkan code_challenge
dari code_verifier
. - [Langkah A] Klien meminta
code
, dengan code_challenge
dan code_challenge_method
ditambahkan ke permintaan. - [Langkah B] Penyedia mengingat
code_challenge
dan code_challenge_method
di server dan mengembalikan code
klien. - [Langkah C] Klien meminta
access_token
, dengan access_token
ditambahkan ke code_verifier
. - Penyedia menerima
code_challenge
dari code_challenge
yang masuk, dan kemudian memeriksanya terhadap code_challenge
, yang ia ingat. - [Langkah D] Jika nilainya cocok, penyedia akan mengeluarkan
access_token
klien.
Mari kita
code_challenge
mengapa
code_challenge
memungkinkan
code_challenge
melindungi diri dari serangan intersepsi kode. Untuk melakukan ini, kita akan melalui tahapan mendapatkan
access_token
.
- Pertama,
code
permintaan aplikasi yang sah ( code_challenge
dan code_challenge_method
dikirim bersama dengan permintaan ). - Malware memotong
code
(tetapi bukan code_challenge
, karena tidak ada code_challenge
dalam respons ). - Malware meminta
access_token
(dengan code
valid, tetapi tanpa code_verifier
valid). - Server memperhatikan ketidakcocokan
code_challenge
dan melemparkan kesalahan.
Perhatikan bahwa penyerang tidak memiliki kemampuan untuk menebak
code_verifier
(256 bit acak!) Atau menemukannya di suatu tempat di log (
code_verifier
ditransmisikan sekali).
Jika semua ini direduksi menjadi satu frasa, maka
code_challenge
memungkinkan penyedia layanan menjawab pertanyaan: "apakah
access_token
diminta oleh aplikasi klien yang sama yang meminta
code
, atau oleh yang lain?"
OAuth 2.0 CSRF
Pada perangkat seluler, OAuth 2.0 sering digunakan sebagai mekanisme otentikasi. Seperti yang kita ingat, otentikasi melalui OAuth 2.0 berbeda dari otorisasi dalam hal kerentanan OAuth 2.0 memengaruhi data pengguna di sisi klien layanan, dan bukan penyedia layanan. Akibatnya, serangan CSRF pada OAuth 2.0 memungkinkan Anda untuk mencuri akun orang lain.
Pertimbangkan serangan CSRF terhadap OAuth 2.0 menggunakan contoh aplikasi klien taksi dan penyedia provider.com. Pertama, seorang penyerang masuk ke attacker@provider.com di perangkatnya dan menerima
code
untuk taksi. Setelah itu, penyerang menyela proses OAuth 2.0 dan menghasilkan tautan:
com.taxi.app://oauth?
code=b57b236c9bcd2a61fcd627b69ae2d7a6eb5bc13f2dc25311348ee08df43bc0c4
Kemudian penyerang mengirimkan tautan ke korban, misalnya, dengan kedok surat atau SMS dari administrasi taksi. Korban
access_token
tautan, aplikasi taksi terbuka di teleponnya, yang menerima
access_token
, dan sebagai akibatnya korban berakhir di akun taksi
penyerang . Tidak menyadari tangkapannya, korban menggunakan akun ini: melakukan perjalanan, memasukkan datanya, dll.
Sekarang, penyerang dapat masuk ke akun taksi korban kapan saja karena ia terikat dengan
attacker@provider.com
. Serangan CSRF saat masuk diizinkan mencuri akun.
Serangan CSRF biasanya dilindungi dengan token CSRF (juga disebut
state
), dan OAuth 2.0 tidak terkecuali. Cara menggunakan token CSRF:
- Aplikasi klien menghasilkan dan menyimpan token CSRF di perangkat seluler pengguna.
- Aplikasi klien menyertakan token CSRF dalam permintaan
code
. - Server mengembalikan token CSRF yang sama dalam respons bersama dengan kode.
- Aplikasi klien membandingkan token CSRF yang masuk dan disimpan. Jika nilainya cocok, maka prosesnya berlanjut.
Persyaratan token CSRF: panjang setidaknya 256 bit, diperoleh dari sumber sekuens pseudorandom yang baik.
Singkatnya, token CSRF memungkinkan aplikasi klien untuk menjawab pertanyaan: "apakah saya mulai mendapatkan
access_token
, atau ada seseorang yang mencoba menipu saya?"
Malware berpura-pura menjadi klien yang sah
Beberapa malware dapat meniru aplikasi yang sah dan menaikkan layar izin atas nama mereka (layar persetujuan adalah layar tempat pengguna melihat: "Saya setuju untuk memberikan akses ke ..."). Pengguna yang lalai dapat mengklik "izinkan", dan sebagai hasilnya, malware memperoleh akses ke data pengguna.
Android dan iOS menyediakan mekanisme untuk saling verifikasi aplikasi. Aplikasi penyedia dapat memverifikasi keabsahan aplikasi klien, dan sebaliknya.
Sayangnya, jika mekanisme OAuth 2.0 menggunakan aliran melalui browser, maka Anda tidak dapat bertahan melawan serangan ini.
Serangan lainnya
Kami memeriksa serangan yang unik untuk ponsel OAuth 2.0. Namun, jangan lupa tentang serangan pada OAuth 2.0 biasa: spoofing
redirect_uri
, intersepsi lalu lintas melalui koneksi yang tidak aman, dll. Anda dapat membaca lebih lanjut tentang mereka di
sini .
Apa yang harus dilakukan
Kami mempelajari cara kerja protokol OAuth 2.0, dan mengetahui kerentanan apa yang ada dalam implementasi protokol ini pada perangkat seluler. Sekarang mari kita kumpulkan skema OAuth 2.0 seluler yang aman dari setiap bagian.
Bagus, buruk OAuth 2.0
Mari kita mulai dengan cara menaikkan layar izin dengan benar. Pada perangkat seluler, ada dua cara untuk membuka halaman web dari aplikasi asli (contoh aplikasi asli: Mail.Ru Mail, VK, Facebook).

Metode pertama disebut Tab Kustom Peramban (pada gambar di sebelah kiri).
Catatan : Tab Khusus Peramban di Android disebut Tab Kustom Chrome, dan di iOS SafariViewController. Sebenarnya, ini adalah tab browser normal, yang ditampilkan langsung di aplikasi, mis. Tidak ada peralihan visual antar aplikasi.
Metode kedua disebut "meningkatkan WebView" (dalam gambar di sebelah kanan), dalam kaitannya dengan ponsel OAuth 2.0, saya menganggapnya buruk.
WebView adalah browser mandiri untuk aplikasi asli.
"
Browser yang berdiri sendiri" berarti bahwa WebView tidak memungkinkan akses ke cookie, penyimpanan, cache, riwayat, dan data lainnya dari Safari dan browser Chrome. Kebalikannya juga benar: Safari dan Chrome tidak dapat mengakses data WebView.
“
Browser untuk aplikasi asli ” berarti bahwa aplikasi asli yang meningkatkan WebView memiliki akses
penuh ke cookie, penyimpanan, cache, riwayat, dan data WebView lainnya.
Sekarang bayangkan: pengguna menekan tombol "log in using ..." dan WebView dari aplikasi jahat meminta nama pengguna dan kata sandi dari penyedia layanan.
Kegagalan sekaligus di semua lini:
- Pengguna memasukkan nama pengguna dan kata sandi dari akun penyedia layanan dalam aplikasi, yang dapat dengan mudah mencuri data ini.
- OAuth 2.0 pada awalnya dikembangkan agar tidak memasukkan nama pengguna dan kata sandi dari penyedia layanan.
- Pengguna terbiasa memasukkan login dan kata sandi di mana saja, kemungkinan phishing meningkat.
Karena semua argumen bertentangan dengan WebView, kesimpulannya menunjukkan dirinya sendiri: naikkan Tab Kustom Peramban untuk layar persetujuan.
Jika ada di antara Anda yang mendebat WebView alih-alih Tab Kustom Peramban, tuliskan di komentar, saya akan sangat berterima kasih.
Skema OAuth 2.0 Mobile Aman
Kami akan menggunakan skema Pemberian Kode Otorisasi karena memungkinkan kami untuk menambahkan
code_challenge
dan melindungi
code_challenge
dari serangan intersepsi kode.
Gambar diambil dari https://tools.ietf.org/html/rfc8252#section-4.1Permintaan kode (langkah 1-2) akan terlihat seperti ini:
https://o2.mail.ru/code?
redirect_uri=com.mail.cloud.app%3A%2F%2Foauth&
anti_csrf=927489cb2fcdb32e302713f6a720397868b71dd2128c734181983f367d622c24& code_challenge=ZjYxNzQ4ZjI4YjdkNWRmZjg4MWQ1N2FkZjQzNGVkODE1YTRhNjViNjJjMGY5MGJjNzdiOGEzMDU2ZjE3NGFiYw%3D%3D&
code_challenge_method=S256&
scope=email%2Cid&
response_type=code&
client_id=984a644ec3b56d32b0404777e1eb73390c
Pada langkah 3, browser menerima respons yang diarahkan:
com.mail.cloud.app://outh?
code=b57b236c9bcd2a61fcd627b69ae2d7a6eb5bc13f2dc25311348ee08df43bc0c4&
anti_csrf=927489cb2fcdb32e302713f6a720397868b71dd2128c734181983f367d622c24
Pada langkah 4, browser membuka Skema URI Kustom dan meneruskan
code
dan token CSRF ke aplikasi klien.
Permintaan untuk
access_token
(langkah 5):
https://o2.mail.ru/token?
code_verifier=e61748f28b7d5daf881d571df434ed815a4a65b62c0f90bc77b8a3056f174abc&
code=b57b236c9bcd2a61fcd627b69ae2d7a6eb5bc13f2dc25311348ee08df43bc0c4&
client_id=984a644ec3b56d32b0404777e1eb73390c
Langkah terakhir mengembalikan respons dengan
access_token
.
Secara umum, skema di atas aman, tetapi ada juga kasus khusus di mana OAuth 2.0 dapat dibuat lebih sederhana dan sedikit lebih aman.
Android IPC
Android memiliki mekanisme pertukaran data dua arah antar proses: IPC (komunikasi antar proses). IPC lebih disukai daripada Skema URI Khusus karena dua alasan:
- Aplikasi yang membuka saluran IPC dapat memverifikasi keaslian aplikasi yang dibuka oleh sertifikatnya. Kebalikannya juga benar: aplikasi yang terbuka dapat memverifikasi keaslian aplikasi yang membukanya.
- Dengan mengirim permintaan melalui saluran IPC, pengirim dapat menerima respons melalui saluran yang sama. Bersama dengan verifikasi timbal balik (butir 1), ini berarti bahwa tidak ada proses pihak ketiga yang dapat mencegat
access_token
.

Dengan demikian, kita dapat menggunakan
Hibah Implisit dan sangat menyederhanakan skema seluler OAuth 2.0. Tidak ada token
code_challenge
dan CSRF. Selain itu, kami akan dapat melindungi diri dari malware yang meniru klien yang sah untuk mencuri akun pengguna.
SDK pelanggan
Selain menerapkan skema keamanan seluler OAuth 2.0 yang dijelaskan di atas, penyedia layanan harus mengembangkan SDK untuk pelanggannya. Ini akan memfasilitasi implementasi OAuth 2.0 di sisi klien dan pada saat yang sama mengurangi jumlah kesalahan dan kerentanan.
Buat kesimpulan
Untuk penyedia OAuth 2.0, saya menyusun "Daftar Periksa Secure Mobile OAuth 2.0":
- Dasar yang kuat sangat penting. Dalam hal mobile OAuth 2.0, yayasan adalah skema atau protokol yang kami pilih untuk diterapkan. Saat menerapkan skema OAuth 2.0 Anda sendiri, mudah untuk membuat kesalahan. Yang lain sudah mengisi gundukan dan membuat kesimpulan, tidak ada yang salah dengan belajar dari kesalahan mereka dan segera membuat implementasi yang aman. Secara umum, skema OAuth 2.0 seluler paling aman adalah yang ada di Bagian Apa yang Harus Dilakukan?
Access_token
dan data sensitif lainnya: di bawah iOS - di Gantungan Kunci, di bawah Android - di Penyimpanan Internal. Repositori ini dirancang khusus untuk tujuan tersebut. Jika perlu, Anda dapat menggunakan Penyedia Konten di Android, tetapi harus dikonfigurasi dengan aman.Code
harus satu kali, dengan waktu hidup yang singkat.- Untuk melindungi dari intersepsi kode, gunakan
code_challenge
. - Untuk melindungi dari serangan CSRF pada login, gunakan token CSRF.
- Jangan gunakan WebView untuk layar persetujuan, gunakan Tab Kustom Browser.
Client_secret
berguna jika tidak disimpan di backend. Jangan berikan kepada klien publik.- Gunakan HTTPS di mana-mana , dengan larangan downgrade ke HTTP.
- Ikuti rekomendasi kriptografi (pemilihan sandi, panjang token, dll.) Dari standar . Anda dapat menyalin data dan mencari tahu mengapa itu dilakukan seperti itu, tetapi Anda tidak bisa melakukan kriptografi Anda .
- Dari aplikasi klien, verifikasi siapa yang Anda buka untuk OAuth 2.0, dan dari aplikasi penyedia, periksa siapa yang membuka Anda untuk OAuth 2.0.
- Waspadai kerentanan OAuth 2.0 yang biasa . Mobile OAuth 2.0 memperluas dan melengkapi yang biasa, jadi tidak ada yang membatalkan cek
redirect_uri
untuk kecocokan yang tepat dan rekomendasi lain untuk OAuth 2.0 biasa. - Pastikan untuk memberikan SDK kepada pelanggan. Klien akan memiliki lebih sedikit bug dan kerentanan dalam kode, dan akan lebih mudah baginya untuk mengimplementasikan OAuth 2.0 Anda.
Apa yang harus dibaca
- [RFC] OAuth 2.0 untuk Aplikasi Asli https://tools.ietf.org/html/rfc8252
- Google OAuth 2.0 untuk Aplikasi Seluler & Desktop https://developers.google.com/identity/protocols/OAuth2InstalledApp
- [RFC] Kunci Bukti untuk Pertukaran Kode oleh Klien Publik OAuth https://tools.ietf.org/html/rfc7636
- Kondisi Balapan OAuth 2.0 https://hackerone.com/reports/55140
- [RFC] OAuth 2.0 Model Ancaman dan Pertimbangan Keamanan https://tools.ietf.org/html/rfc6819
- Serangan pada OAuth 2.0 biasa https://sakurity.com/oauth
- [RFC] OAuth 2.0 Protokol Registrasi Klien Dinamis https://tools.ietf.org/html/rfc7591
Ucapan Terima Kasih
Terima kasih kepada semua orang yang membantu menulis artikel ini, terutama Sergey Belov, Andrey Sumin, Andrey Labunts (
@isciurus ) dan Daria Yakovleva.