USERCLIENTIdP (Google)APIconsentcode → tokenscoped access

OAuth 2.0

11 min bacaTeknologi Web

Setiap butang "Log masuk dengan Google", setiap pautan "Sambungkan akaun Twitter anda", setiap penyepaduan API antara perkhidmatan moden menggunakan OAuth. Protokol menggantikan perkongsian kata laluan dengan aliran token dan skrin persetujuan, dan memahami bahagian yang bergerak menghilangkan kategori serangan dan kemudahan kedua-duanya.

Badan artikel penuh disediakan dalam bahasa Inggeris di bawah.

OAuth 2.0 ialah rangka kerja kebenaran yang membenarkan satu aplikasi mendapat akses terhad kepada sumber aplikasi lain bagi pihak pengguna — tanpa pernah melihat kata laluan pengguna. Kes penggunaan klasik: apl kalendar yang perlu membaca Kalendar Google anda seharusnya tidak memerlukan anda memberikan kata laluan Google anda. OAuth membolehkan anda memberikan token berskop dan boleh dibatalkan kepada apl itu.

Pelakon

Empat peranan dalam aliran OAuth:

  • Pemilik sumber — anda, pengguna dengan data di suatu tempatXPLZ3ClientXPLX1
  • aplikasi4Z12XXXPLX1 yang mahukan akses (cth., pemapar kalendar pihak ketiga)
  • Pelayan kebenaran — perkhidmatan yang mengesahkan anda dan mengeluarkan token (cth., titik akhir OAuth Google)
  • Resource server. API)

Aliran Kod Kebenaran

Aliran sisi pelayan standard, dipermudahkan:

  1. Anda mengklik "Sambungkan Kalendar Google" dalam apl pelanggan.
  2. Pelanggan mengubah hala pelayar anda ke pelayan id, ubah hala_parameter Google: (calendar.read), nyatakan (token CSRF).
  3. Anda mengesahkan kepada Google jika belum log masuk.
  4. Google menunjukkan skrin persetujuan kepada anda: "CalendarViewer mahu membaca kalendar anda. Benarkan?"
  5. Anda klik Benarkan. Google mengubah hala penyemak imbas anda kembali ke redirect_uri klien dengan kod kebenaran sekali.
  6. Kod sisi pelayan klien menukar kod keizinan (serta rahsia pelanggannya) untuk token akses dengan menghubungi titik akhir token Google secara terus.
  7. Pelanggan menggunakan token akses untuk memanggil Google4XPLXhen4Z4Zhen API pada Kalendar4ZXPLXW anda. token tamat tempoh (biasanya sejam), pelanggan menggunakan token muat semula untuk mendapatkan yang baharu tanpa mengganggu anda.

Sifat keselamatan yang penting: kata laluan anda tidak pernah menyentuh apl pelanggan. Pelanggan mendapat token berskop yang anda boleh batalkan di papan pemuka akaun Google pada bila-bila masa.

OAuth 2.0 lwn OAuth 2.1 lwn OIDC

  • OAuth 2.0 ialah standard RFC 2012 (RFC 2012). Beberapa RFC sambungan dan dokumen amalan terbaik telah ditambah sejak itu.
  • OAuth 2.1 (dalam draf setakat 2026) menggabungkan amalan terbaik semasa ke dalam satu spesifikasi — PKCE wajib, Aliran Tersirat dialih keluar, dsb. (OIDC) ialah lapisan identiti di atas OAuth 2.0. OAuth sahaja memberikan token akses legap; OIDC menambah token ID (JWT) yang mengesahkan pengguna. Kebanyakan butang "Log masuk dengan..." menggunakan OIDC, bukan OAuth biasa.

Jenis geran

OAuth 2.0 mentakrifkan beberapa aliran untuk senario yang berbeza:

  • Alir Pelayan-pelayan standard diterangkan di atas standard. Dengan sambungan PKCE, digunakan oleh apl mudah alih dan SPA juga.
  • Aliran Tersirat (ditamatkan) — mengeluarkan token akses terus melalui serpihan URL. Terdedah kepada kebocoran token; digantikan dengan Kod Kebenaran + PKCE.
  • Kertiliti Kata Laluan Pemilik Sumber (jarang digunakan) — pelanggan mengumpul kata laluan pengguna dan menukarnya dengan token. Hanya boleh digunakan dalam senario migrasi lama.
  • Kredential Pelanggan — untuk mesin ke mesin yang tiada pengguna. Pelanggan mengesahkan dirinya sendiri dan mendapat token untuk sumbernya sendiri.
  • Kod Peranti — untuk peranti tanpa penyemak imbas (TV, IoT). Peranti menunjukkan kod; pengguna memberi kebenaran daripada telefon atau komputer riba.
  • Refresh Token — menukar token muat semula yang tahan lama dengan token akses baharu tanpa interaksi pengguna.

PKCE: sambungan mesti ada

XPLZ90 untuk Exchange

XPLXX, disebut "pixie") menghalang serangan pemintasan kod kebenaran. Pelanggan menjana rahsia rawak, mencincangnya dan menghantar cincang dalam permintaan kebenaran. Apabila menukar kod, ia menghantar rahsia asal. Pelayan kebenaran mengesahkan padanan cincang. Mana-mana penyerang yang memintas kod tidak boleh menukarnya tanpa rahsia asal.

PKCE kini dianggap wajib untuk semua klien OAuth — awam (penyemak imbas, mudah alih) dan sulit (sebelah pelayan) sama.

Scopes

Token dikeluarkan dengan skop tertentu — tindakan yang dibenarkan untuk dilakukan. Skop biasa Google kelihatan seperti https://www.googleapis.com/auth/calendar.readonly. Pelanggan meminta skop; pengguna melihatnya pada skrin persetujuan dan meluluskan atau menolak. Prinsip keistimewaan paling rendah: minta hanya skop yang sebenarnya anda perlukan.

Serangan OAuth biasa

  • Buka ubah hala. Parameter redirect_uri yang salah konfigurasi membolehkan penyerang mengubah hala kod keizinan ke pelayan mereka sendiri.XPLX2XXePLXXZPLZPLZ1000 parameter o1XPLZ11PLZPLZPLZ1000 Tanpa nilai keadaan yang terikat pada sesi pengguna, aliran OAuth terdedah kepada CSRF — penyerang memperdaya mangsa untuk melengkapkan aliran OAuth yang memautkan akaun penyerang ke sesi mangsa.
  • Tkebocoran token dalam sejarah penyemak imbas (Aliran Tersirat kelemahan).
  • Tkecurian token melalui XSS. Jika apl pelanggan menyimpan token dalam localStorage dan mempunyai sebarang kelemahan XSS, penyerang boleh mencuri token tersebut.
  • Phishing skrin persetujuan. klien yang sensitif akan meminta penyerang berniat jahat untuk mendaftarkan OSP. pengguna, disyaratkan untuk mengklik "Benarkan" pada skrin persetujuan, memberikan akses tanpa penelitian.

Perkara yang perlu dilakukan sebagai pengguna

  • Semak apl yang disambungkan secara berkala pada tetapan akaun Google/Apple/Microsoft/Facebook/GitHub. Batalkan yang anda tidak gunakan.
  • Baca skop skrin persetujuan sebelum memberikan akses. "Urus kalendar anda" berbeza daripada "Lihat kalendar anda."
  • Skeptikal dengan permintaan OAuth daripada apl yang anda tidak kenali, walaupun ia muncul semasa aliran kerja yang biasa.

Soalan lazim

Adakah OAuth sama dengan pengesahan?
Tidak. OAuth ialah keizinan — ia memberikan pelanggan kebenaran untuk mengakses sumber. OpenID Connect, dibina pada OAuth, menambah pengesahan. "Log masuk dengan Google" ialah OIDC; "Sambungkan Kalendar Google" boleh sama ada bergantung pada sama ada apl perlu mengetahui siapa anda atau hanya memerlukan akses kepada data anda.
Patutkah saya menggunakan OAuth atau menyimpan kata laluan?
Gunakan OAuth di mana mungkin. Menyimpan kata laluan pengguna bermakna mewarisi semua tanggungjawab untuk pencincangan, garam, tindak balas pelanggaran, pemulihan kata laluan dan 2FA. Mewakilkan kepada Google/Apple/Microsoft/GitHub melalui OAuth melepaskan semua itu. Tukar ganti ialah pengguna anda memerlukan akaun di penyedia tersebut.
Mengapakah token OAuth boleh dibatalkan tetapi kata laluan tidak boleh?
Token merujuk masukan dalam pangkalan data pelayan kebenaran. Membatalkan entri akan membatalkan token serta-merta. Kata laluan adalah pengetahuan — anda boleh memutarkan kata laluan dan memaksa pengesahan semula, tetapi kata laluan lama kekal sah sehingga anda melakukannya.
Apakah perbezaan antara OAuth 2.0 dan OAuth 1.0?
OAuth 1.0 (2007) menggunakan tandatangan kriptografi untuk setiap permintaan. OAuth 2.0 (2012) bergantung pada TLS untuk keselamatan pengangkutan dan menggunakan token pembawa. OAuth 2.0 adalah lebih mudah untuk dilaksanakan dan dihantar dalam hampir setiap API moden; OAuth 1.0 pada dasarnya ditamatkan.
Adakah token OAuth berbahaya jika dibocorkan?
Ya — sesiapa yang mempunyai token mempunyai akses yang diberikan sehingga tamat tempoh atau dibatalkan. Mitigasi: jangka hayat token akses yang singkat (biasa 1 jam), muat semula token yang disimpan dengan lebih selamat, pengecilan skop, pengelogan audit. Rawat token akses dengan penjagaan yang sama seperti kata laluan semasa tempoh sahnya.
OAuth 2.0 Menjelaskan: Bagaimana "Log masuk dengan Google" Sebenarnya Berfungsi