OAuth: perihalan protokol dalam bahasa yang mudah dan boleh difahami. Cara mengalih keluar OAuth2 Playground daripada ID klien. Bagaimana untuk mendapatkan ID pelanggan dan kunci rahsia

Pada tahun 2010, kerja bermula pada versi baru protokol OAuth 2.0, yang tidak akan serasi ke belakang dengan OAuth 1.0. Pada Oktober 2012, rangka kerja OAuth 2.0 telah diterbitkan dalam RFC 6749, dan penggunaan pembawa token dalam RFC 6750, kedua-dua piawaian menjejaki permintaan ulasan. RFC tambahan masih dibangunkan.

Terdapat beberapa prasyarat untuk penciptaan OAuth 2.0. Pertama sekali, OAuth agak tidak remeh untuk digunakan di sisi pelanggan. Salah satu matlamat dalam membangunkan OAuth baharu adalah untuk memudahkan pembangunan aplikasi klien. Kedua, walaupun pelaksanaan tiga kaedah (dipanggil aliran) dinyatakan dalam piawaian untuk mendapatkan token (pengecam unik) untuk kebenaran: untuk aplikasi web, klien desktop dan pelanggan mudah alih, sebenarnya ketiga-tiga kaedah digabungkan menjadi satu. Dan ketiga, protokol ternyata tidak berskala. Ia dirancang untuk menambah:

  • 6 aliran baharu.
Aliran Ejen Pengguna - untuk pelanggan yang berjalan di dalam ejen pengguna (biasanya pelayar web). Aliran Pelayan Web - untuk pelanggan yang merupakan sebahagian daripada aplikasi pelayan web, boleh diakses melalui permintaan HTTP. Aliran Peranti - Sesuai untuk pelanggan yang dijalankan pada peranti terhad, tetapi di mana pengguna akhir mempunyai akses berasingan kepada penyemak imbas pada komputer atau peranti lain. Aliran Nama Pengguna dan Kata Laluan - Digunakan dalam kes di mana pengguna mempercayai klien untuk mengendalikan kelayakannya, tetapi dia masih tidak mahu membenarkan klien menyimpan nama pengguna dan kata laluan. Aliran ini hanya sesuai apabila terdapat tahap kepercayaan yang tinggi antara pengguna dan pelanggan. Aliran Kredensial Pelanggan - Pelanggan menggunakan kelayakannya untuk mendapatkan token. Aliran Penegasan - Pelanggan menyerahkan penegasan, seperti penegasan SAML, kepada pelayan kebenaran sebagai pertukaran token. Aplikasi yang dijalankan pada komputer meja atau peranti mudah alih boleh dilaksanakan menggunakan aliran di atas.
  • Token pembawa.
Kaedah kebenaran adalah serupa dengan kaedah kebenaran sedia ada menggunakan kuki. Dalam kes ini, token digunakan secara langsung sebagai rahsia (fakta yang mempunyai token membenarkan pelanggan) dan dihantar melalui HTTPS. Ini membolehkan anda mengakses API melalui skrip mudah (cth menggunakan cURL).
  • Tandatangan yang dipermudahkan.
Tandatangan telah dipermudahkan untuk menghapuskan keperluan untuk analisis khas, pengekodan dan pengisihan parameter.
  • Token jangka pendek dengan kebenaran jangka panjang.
Daripada mengeluarkan token tahan lama (yang boleh dikompromi dari semasa ke semasa), pelayan menyediakan akses jangka pendek dan keupayaan jangka panjang untuk mengemas kini token tanpa interaksi pengguna.
  • Pengasingan peranan.
Pelayan yang berbeza mungkin bertanggungjawab untuk kebenaran dan untuk menyediakan akses kepada API.

Perlu diingat bahawa walaupun standard OAuth 2.0 belum lagi diluluskan, ia telah digunakan oleh sesetengah perkhidmatan. Sebagai contoh, API Graf Facebook hanya menyokong OAuth 2.0.

Perbezaan antara OAuth dan OpenID

Terdapat salah tanggapan bahawa OAuth ialah lanjutan daripada protokol OpenID. Sebenarnya ini tidak benar. Walaupun OpenID dan OAuth mempunyai banyak persamaan, yang kedua ialah protokol kendiri yang sama sekali tidak berkaitan dengan OpenID.

Cap masa dan Nonce

Untuk mengelakkan ancaman permintaan main semula, OAuth menggunakan nonce dan cap waktu. Istilah "nonce" bermaksud bahawa masa ini digunakan sekali dan merupakan set rawak unik huruf dan nombor yang bertujuan untuk mengenal pasti secara unik setiap permintaan yang ditandatangani. Dengan mempunyai ID unik untuk setiap permintaan, pembekal perkhidmatan akan dapat menghalang permintaan penggunaan semula. Ini bermakna pelanggan menjana rentetan unik untuk setiap permintaan yang dihantar ke pelayan, dan pelayan menjejaki semua nonces yang digunakan untuk menghalangnya daripada digunakan buat kali kedua.

Menggunakan nonces boleh menjadi sangat mahal untuk pelayan, kerana ia memerlukan storan kekal semua nonces yang diterima. Untuk memudahkan pelaksanaan, OAuth menambahkan cap waktu pada setiap permintaan, yang membenarkan pelayan hanya menyimpan nonce untuk masa yang terhad. Apabila permintaan tiba dengan cap waktu yang lebih awal daripada masa yang disimpan, permintaan itu ditolak kerana pelayan tidak lagi mempunyai nonce dari masa itu.

Tauliah dan Token

OAuth menggunakan tiga jenis bukti kelayakan: kunci pengguna dan rahsia atau bukti kelayakan pelanggan, bukti kelayakan sementara (token minta dan bukti kelayakan rahsia atau sementara) dan token (token akses dan bukti kelayakan rahsia atau token).

Bukti kelayakan pelanggan digunakan untuk mengesahkan pelanggan. Ini membolehkan pelayan mengumpul maklumat tentang pelanggan. Menggunakan perkhidmatannya, pelayan menawarkan beberapa pelanggan pemprosesan khas, seperti pendikitan akses percuma, atau menyediakan pemilik sumber maklumat yang lebih terperinci tentang pelanggan yang cuba mengakses sumber dilindungi mereka. Dalam sesetengah kes, bukti kelayakan pelanggan mungkin tidak selamat dan hanya boleh digunakan untuk tujuan maklumat, seperti dalam aplikasi desktop.

Token digunakan dan bukannya nama dan kata laluan pemilik sumber. Pemilik sumber tidak berkongsi bukti kelayakannya dengan pelanggan, sebaliknya membenarkan pelayan untuk mengeluarkan token kepada pelanggan - kelas kelayakan khas yang mewakili akses pemberian. Pelanggan menggunakan token untuk mengakses sumber yang dilindungi tanpa mengetahui kata laluan pemilik sumber.

Token terdiri daripada pengecam, biasanya (tetapi tidak selalu) set rawak huruf dan nombor yang unik dan sukar untuk diteka, dan kunci untuk melindungi token daripada digunakan oleh orang yang tidak dibenarkan. Token adalah terhad dalam skop dan tempoh, dan boleh dibatalkan pada bila-bila masa oleh pemilik sumber tanpa menjejaskan token lain yang dikeluarkan kepada pelanggan lain.

Proses kebenaran OAuth juga menggunakan satu set bukti kelayakan sementara yang digunakan untuk menentukan permintaan kebenaran. Untuk menampung pelbagai jenis pelanggan (web, desktop, mudah alih, dll.), kelayakan sementara menawarkan fleksibiliti dan keselamatan tambahan.

Cara OAuth berfungsi

Cara protokol OAuth berfungsi

Mari kita terangkan pengendalian protokol OAuth menggunakan contoh. Katakan pengguna (pemilik sumber) ingin mencetak fotonya (sumber) yang dimuat naik ke tapak "photos.example.net" (pelayan) menggunakan perkhidmatan pencetakan "printer.example.net" (klien).

  1. Pelanggan, menggunakan protokol HTTPS, menghantar permintaan kepada pelayan yang mengandungi pengecam klien, cap masa, alamat panggil balik yang token harus dikembalikan, jenis tandatangan digital yang digunakan dan tandatangan itu sendiri.
  2. Pelayan mengakui permintaan itu dan bertindak balas kepada pelanggan dengan Token Akses dan sebahagian daripada rahsia yang dikongsi.
  3. Pelanggan memindahkan token kepada pemilik sumber (pengguna) dan mengalihkannya ke pelayan untuk kebenaran.
  4. Pelayan, setelah menerima token daripada pengguna, memintanya untuk log masuk dan kata laluannya, dan jika pengesahan berjaya, meminta pengguna mengesahkan akses pelanggan kepada sumber (kebenaran), selepas itu pengguna dialihkan oleh pelayan ke pelanggan.
  5. Pelanggan menghantar token kepada pelayan melalui TLS dan meminta akses kepada sumber.
  6. Pelayan mengakui permintaan dan bertindak balas kepada pelanggan dengan token akses baharu.
  7. Menggunakan token baharu, pelanggan menghubungi pelayan untuk mendapatkan sumber.
  8. Pelayan mengakui permintaan dan menyediakan sumber.

Contoh ini menerangkan aliran dengan kod kebenaran (Aliran Kod Kebenaran). Selain itu, standard OAuth 2.0 menerangkan aliran berikut:

  • Aliran Pemberian Tersirat
Perbezaan daripada aliran kod pengesahan ialah klien tidak disahkan oleh pelayan dan token akses dikeluarkan oleh pelayan selepas permintaan kebenaran.
  • Menyegarkan Aliran Token Akses Tamat Tempoh
Perbezaan antara aliran ini dan contoh yang diberikan adalah seperti berikut: pada langkah 2, pelayan, sebagai tambahan kepada token akses, yang mempunyai hayat terhad, mengeluarkan token muat semula; pada langkah 8, pelayan menyemak sama ada token akses itu sah (dalam erti kata tamat tempoh seumur hidup), dan bergantung pada ini, ia sama ada memberikan akses kepada sumber atau memerlukan token akses dikemas kini (yang disediakan semasa pembentangan token penyegaran).
  • Aliran Bukti Kelayakan Kata Laluan Pemilik Sumber
Dalam aliran ini, pemilik sumber menyediakan pelanggan dengan log masuk dan kata laluan, dia menghantarnya ke pelayan dan menerima token untuk mengakses sumber. Walaupun pada hakikatnya mod operasi ini agak bertentangan dengan konsep mewujudkan protokol, ia diterangkan dalam spesifikasi.
  • Aliran Bukti Kelayakan Pelanggan
Dalam mod operasi protokol ini, pelayan menyediakan token akses selepas pelanggan menghantar pengguna dan kata laluannya, yang sebelum ini ditetapkan oleh pelayan kebenaran (spesifikasi tidak menyatakan cara tepat). Malah, pelanggan serta-merta menjalani kedua-dua kebenaran dan pengesahan.

OAuth menyokong dua kaedah untuk mengesahkan mesej daripada klien: HMAC -SHA1 dan RSA -SHA1 . Anda boleh menghantar mesej tanpa tandatangan, kemudian "teks biasa" ditunjukkan dalam medan jenis tandatangan. Tetapi dalam kes ini, mengikut spesifikasi, sambungan antara klien dan pelayan mesti diwujudkan melalui SSL atau TLS.

Portal menggunakan OAuth

Perbincangan

Pada Julai 2012, Eran Hammer, editor semasa piawaian OAuth 2.0, mengumumkan peletakan jawatannya selepas tiga tahun bekerja pada piawaian baharu itu, dan meminta namanya dialih keluar daripada spesifikasi. Dia telah bercakap tentang pandangannya di laman webnya. Dia kemudiannya memberikan pembentangan. .

Nota

lihat juga

Pautan


Yayasan Wikimedia. 2010.

Terdapat banyak cara untuk mengedarkan spam berniat jahat di VKontakte. Tetapi perosak tidak tidur, semakin banyak idea menarik masuk ke dalam kepala mereka. Dan ternyata ia sangat berguna. Penipu telah belajar menggunakannya untuk memintas halaman amaran tentang tapak berniat jahat.

Dan semuanya bermula apabila satu hari mesej berikut muncul di dinding saya:


Kerana ingin tahu, saya mengikuti pautan itu dan berakhir di tapak pancingan data yang lain. Tetapi pautan itu sendiri kelihatan pelik kepada saya, ia kelihatan seperti (separuh aksara dalam ASCII):
vkontakte.ru/away.php ? kepada=http%3A%2F%2FApi.vKontakte.Ru%2F%2Fo%2561u%2574%…

Di sinilah keseronokan bermula...
Mari lihat pautan kedua dalam bahagian:

Apakah maksud setiap parameter:

  • client_id - ID aplikasi yang memerlukan kebenaran;
  • redirect_uri - alamat yang akan dihantar access_token (melalui ubah hala);
  • paparan - jenis tetingkap kebenaran (halaman, pop timbul, sentuh dan wap).
Sebenarnya, redirect_uri mengandungi alamat tapak pancingan data. Memandangkan terdapat ralat dalam parameter paparan (ia mengandungi sampah "?390852"), tetingkap kebenaran tidak dipaparkan, tetapi segera dialihkan ke tapak pancingan data dengan parameter berikut: error=invalid_request&error_description=Tidak sah+paparan+lulus

Ini adalah titik keseluruhan untuk memintas senarai hitam tapak VKontakte yang berniat jahat. Hanya makluman tentang peralihan kepada api.vk.com muncul. Dan sebagai hasil daripada peralihan, kami pergi terus ke tapak pancingan data yang berada dalam senarai hitam. Apabila anda mengikuti pautan vkontakte.ru/away.php?to=vgostivk.dyndns**:

Ternyata, aplikasi yang sepatutnya memerlukan kebenaran tergantung pada pengguna yang digodam:

Dan tapak pancingan data itu sendiri direka dengan agak menarik. Reka bentuk, seperti biasa, adalah gaya kenalan dan diminta untuk log masuk. Saya log masuk menggunakan e-mel dan kata laluan rawak, dan saya menelan yang palsu dengan baik. Apa yang berlaku seterusnya adalah lebih menarik; berita dari "Pavel Durov" muncul di halaman utama:

Selepas mengklik pada butang "Buat kaunter peribadi", bar kemajuan yang menarik diikuti. Kemudian anda diminta untuk menunjukkan nombor anda dan menghantar SMS:

Secara teorinya, selepas berjaya "pengaktifan" ia sepatutnya diubah hala ke halaman activ.php, tetapi saya tidak dapat ke sana. Petikan daripada skrip JS tapak pancingan data:

...
jika (req.status == 200) (
// jika status adalah 200 (OK) - berikan respons kepada pengguna
if (req.responseText == "ok" ) (
//statusElem.innerHTML = "Semuanya berdengung!";
get_activation();
}
if (req.responseText == "not") (statusElem.innerHTML = "Kod pengaktifan tidak sah";}
//statusElem.innerHTML = "Respons pelayan: "+req.responseText;
...
fungsi get_activation() (
document .location="activ.php" ;
}

* Kod sumber ini telah diserlahkan dengan Penyerlah Kod Sumber.


Pokoknya: Penipu menggunakan OAuth 2.0 untuk memintas amaran, mendapatkan kata laluan dan e-mel pengguna, malah cuba menipu mereka untuk menghantar SMS (kemungkinan besar menggunakan sistem langganan).

Protokol popular yang membenarkan sosial perkhidmatan berintegrasi antara satu sama lain dan menyediakan cara yang selamat untuk bertukar maklumat peribadi. OAuth boleh menyambungkan 2 perkhidmatan, setiap satunya mempunyai pangkalan pengguna sendiri - dalam kes ini saya memanggilnya "sosial". Apabila anda mula bekerja dengan OAuth, perasaan pertama ialah protokol itu sangat kompleks dan berlebihan. Dalam artikel ini, saya akan cuba menerangkan asas OAuth dalam bahasa manusia.

Contoh kebenaran silang

Mari kita kembali ke tahun 2005 dan bayangkan bahawa kita sedang menulis rangkaian sosial. Ia mempunyai borang untuk mengimport kenalan daripada buku alamat GMail. Apakah yang anda perlukan untuk mengakses kenalan GMail anda? Sudah tentu, log masuk dan kata laluan untuk peti mel. Tetapi jika kami meminta anda memasukkannya di laman web kami, pengguna akan mengesyaki ada sesuatu yang tidak kena. Di manakah jaminan bahawa kami tidak menyimpan kata laluan yang dimasukkan pada pelayan? Jadi kami mahu kata laluan dimasukkan hanya di laman web Gmail, dan selepas itu akses kepada kenalan melalui API GMail telah diberikan kepada rangkaian sosial kami (mungkin buat sementara waktu). Mari kita bersetuju dengan syarat.
  • Pengguna: pengguna; skrip untuk memproses borang untuk mengimport kenalan pada rangkaian sosial.
  • Pembekal perkhidmatan: pembekal data; GMail, yang mengandungi data buku alamat yang menarik minat Pengguna.
  • pengguna: pengguna yang mempunyai akaun dengan Pengguna dan Pembekal Perkhidmatan.
  • Sumber Dilindungi: data peribadi; kenalan daripada buku alamat di GMail (iaitu sumber Pembekal Perkhidmatan).
  • API Pembekal: API GMail yang membenarkan mana-mana skrip untuk mendapatkan semula kenalan daripada buku alamat GMail.
tugas OAuth- pastikan Pengguna mempunyai peluang untuk bekerja pada perkhidmatan Pengguna (di rangkaian sosial) dengan data yang dilindungi Pembekal Perkhidmatan (GMail), memasukkan kata laluan untuk data ini secara eksklusif pada Pembekal Perkhidmatan dan semasa kekal pada Pengguna. laman web. Tidak begitu sukar, bukan?

Bagaimanakah OAuth berbeza daripada OpenID?

OAuth sering dirujuk sebagai "protokol robot," berbanding OpenID sebagai "protokol pengguna." Jangan mengelirukan mereka!
  1. OpenID ialah protokol untuk pendaftaran dipercepatkan. OpenID membolehkan pengguna mendapatkan akaun pada mana-mana perkhidmatan tanpa memasukkan kata laluan jika dia sudah berdaftar di tempat lain di Internet. (Dan kemudian anda boleh log masuk ke perkhidmatan tanpa memasukkan kata laluan, diberi kuasa "di suatu tempat.") Contohnya, jika anda mempunyai akaun di Yandex, anda boleh menggunakannya untuk "log masuk" ke mana-mana perkhidmatan yang menyokong kebenaran OpenID.
  2. OAuth ialah protokol untuk akses yang dibenarkan kepada API pihak ketiga. OAuth membenarkan skrip Pengguna memperoleh akses API terhad kepada data Pembekal Perkhidmatan pihak ketiga jika Pengguna memberi kebenaran. Itu. ia adalah satu cara untuk mengakses API.

Analogi polis

Bayangkan anda seorang pekerja Jabatan Siasatan Jenayah, mencari penamatan kes kecurian WebMoney dari tahun 1973. Mari kita bersetuju dengan syarat:
  • Pengguna OAuth: Siasatan Jenayah.
  • pengguna: Pegawai Penyiasat Jenayah.
  • Pembekal perkhidmatan: Fail kad arkib jenayah.
  1. OpenID: pekerja Jabatan Siasatan Jenayah (Pengguna) datang ke Indeks Kad (Penyedia Perkhidmatan), membentangkan Kebenaran di pintu masuk dan menyusun kad di tempat untuk mencari maklumat.
  2. OAuth: pekerja Jabatan Siasatan Jenayah (Pengguna) terus dari tempat kerja (Pengguna) memanggil Indeks Kad (Penyedia Perkhidmatan). Dia melaporkan namanya; jika dia diiktiraf (Kebenaran), dia meminta untuk menyediakan senarai semua jenayah untuk 1973 (panggilan API).
Seperti yang anda lihat, OpenID dan OAuth adalah perkara yang berbeza. OpenID membolehkan anda mengakses sumber tertentu di tempat kejadian. OAuth memastikan bahawa beberapa maklumat diambil daripada perkhidmatan jauh melalui API.

Garis besar artikel ini

Sebelum beralih ke bahagian utama, mari kita lihat dengan tepat bagaimana kita akan meneruskan.
  1. Mari kita pertimbangkan masalah yang timbul apabila melaksanakan kebenaran silang "secara manual".
  2. Mari kita bincangkan tentang apa itu "aplikasi" dan siapa itu Pengguna.
  3. Mari kita sentuh asas kriptografi.
  4. Mari kita nyatakan aplikasi demo yang akan kita tulis dalam artikel ini.
  5. Mari kita tentukan pelayan OAuth ujian yang akan kita uji.
  6. Mari kita lalui semua langkah protokol OAuth dan sediakan sumber skrip.

Mengenai ciptaan basikal

Cara yang baik untuk memahami sesuatu adalah dengan melakukannya sendiri, memijak semua garu yang disediakan di sepanjang jalan. Sekarang kami akan mencipta semula roda: mari cuba bayangkan bagaimana kami akan menyelesaikan masalah interaksi antara Pengguna dan Pembekal Perkhidmatan tanpa sebarang protokol piawai.

Mula-mula, mari tulis borang itu sendiri untuk mengimport kenalan daripada GMail: Seterusnya, kami akan meminta pembangun GMail untuk memastikan bahawa apabila pengguna menavigasi ke URI /auth.php, dia diberikan borang kebenaran (dalam veloworld kami, GMail ditulis dalam PHP). Selepas berjaya memasukkan kata laluan, pengguna harus diubah hala ke tapak yang URLnya ditentukan dalam parameter retpath. Selain itu, sebagai tambahan, beberapa kunci rahsia mesti dihantar dalam URL, yang sudah boleh digunakan untuk mengakses API GMail.

Jadi, selepas memasukkan kata laluan, pengguna akan kembali ke tapak kami di alamat berikut: Dan daripada skrip /import.php kita akan beralih ke API GMail, masukkan kekunci Y49xdN0Zo2B5v0RR ke dalamnya dan muatkan kenalan: Baik, mari sekarang mengira garu (kerana benjolan ia akan terlambat untuk mengira).

Raut pertama: menggantikan alamat pemulangan retpath

Sudah tentu, anda meneka bahawa penyerang akan mula-mula meletakkan pautan di tapak webnya dan memaksa anda untuk mengklik padanya. Akibatnya, dia akan menerima kunci rahsia yang GMail kembalikan, dan oleh itu kenalan anda:

Garu kedua: "mendengar" pada kunci rahsia

Katakan kami melindungi laluan balik itu, dan ia kini hanya boleh menghala ke tapak kami. Tetapi masalah dengan parameter rahsia kekal. Rahsia boleh diintip dari belakang atau dipintas dengan mendengar trafik WiFi. Atau suatu hari nanti tapak anda akan mempunyai kelemahan XSS yang membolehkan anda "mencuri" kunci rahsia. Dengan rahsia nilai, penyerang akan dapat membaca buku alamat anda. Ini bermakna bahawa rahsia itu perlu dilindungi daripada pemintasan (sebaik-baiknya, ia tidak boleh dihantar melalui URL sama sekali).

Rake nombor tiga: terlalu banyak ubah hala

Jika setiap panggilan API memerlukan rahsia yang berbeza, maka kami perlu mengatur seberapa banyak ubah hala ke tapak Penyedia Perkhidmatan kerana terdapat panggilan. Dengan penggunaan intensif API, ini berfungsi dengan sangat perlahan dan agak menyusahkan...

Rake nombor empat: pengenalan pengguna yang lemah

GMail, sudah tentu, ingin tahu siapa yang menggunakan APInya. Benarkan akses kepada beberapa tapak dan tolak akses kepada yang lain... Ini bermakna apabila membuat permintaan dalam borang import kenalan, Pengguna (tapak) mesti "dibentangkan" kepada Pembekal Perkhidmatan (GMail). Dalam kes kami, fungsi ini sebahagiannya dilakukan oleh retpath (nama tapak di dalamnya), tetapi kaedah ini tidak universal, kerana Mekanisme "pembentangan" juga mesti diaktifkan apabila memanggil kaedah API.

Yayasan OAuth

Perlu diperhatikan bahawa masih terdapat banyak "garu bawah air" yang tinggal. Saya tidak akan menerangkannya di sini, kerana garu ini terletak di Palung Mariana (dalam, 10920 m). Ia akan mengambil sedozen halaman untuk menerangkan kelemahan. Jadi saya akan melompat terus ke huraian OAuth, di mana semua masalah telah diselesaikan.

Aplikasi = Pengguna + akses API

Apabila bekerja dengan OAuth, adalah penting bahawa istilah Pengguna tidak terhad kepada maksud "tapak". Pengguna adalah sesuatu permohonan, dan di mana ia terletak tidak begitu penting. Contoh Pengguna daripada kehidupan sebenar: Tetapi anda tidak boleh membuat kekacauan daripada OAuth sahaja. Sesungguhnya, semua yang OAuth sediakan ialah keupayaan untuk log masuk ke perkhidmatan jauh (Penyedia Perkhidmatan) dan membuat permintaan yang dibenarkan kepada API. Tidak kira bagaimana API ini distrukturkan: ia boleh menjadi SOAP tulen, pendekatan REST, dsb. Perkara utama ialah setiap kaedah API mengambil sebagai parameter khas input yang diluluskan mengikut protokol OAuth.

Token = Kunci + Rahsia

Salah satu prinsip OAuth menyatakan bahawa tiada kunci peribadi harus dihantar secara terbuka dalam permintaan (kami melihat sebab dalam contoh di atas). Oleh itu, protokol beroperasi dengan konsep Token. Token sangat serupa dengan pasangan log masuk + kata laluan: log masuk adalah maklumat terbuka, dan kata laluan hanya diketahui oleh pihak yang menghantar dan menerima. Dalam istilah OAuth, analog log masuk dipanggil Kunci, dan analog kata laluan dipanggil Rahsia. Keadaan apabila Rahsia hanya diketahui oleh pengirim dan penerima, tetapi tidak kepada orang lain, dipanggil Rahsia Kongsi.

Jadi, jika Pengguna dan Pembekal entah bagaimana bersetuju dengan Rahsia Dikongsi, mereka boleh secara terbuka menukar Kunci yang sepadan dalam URL tanpa rasa takut kunci tersebut dipintas. Tetapi bagaimana untuk melindungi URL dengan Kunci daripada pemalsuan?

Mesej = Dokumen + Tandatangan Digital

"Tandatangan digital" kedengaran menakutkan, tetapi sebenarnya ia adalah perkara yang agak jelas. Apabila anda menandatangani dokumen dengan pen, anda memperakui bahawa dokumen itu ditulis oleh anda dan bukan oleh orang lain. Tandatangan anda, seolah-olah, "ditambahkan" pada dokumen dan disertakan bersamanya dalam "satu set".

Begitu juga, tandatangan digital ditambahkan pada blok data untuk memastikan orang yang menjana data itu tidak menyamar sebagai orang lain. Tandatangan digital tidak menyulitkan dokumen, ia hanya menjamin kesahihannya! Rahsia Kongsi yang sama, yang diketahui oleh penerima dan pengirim, tetapi tidak kepada orang lain, membolehkan anda menandatangani.

Bagaimana ia berfungsi? Biarkan $sharedSecret kami = 529AeGWg, dan kami membisikkannya di telinga pihak yang menerima. Kami ingin menghantar mesej "Telefon saya 1234567" dengan perlindungan terjamin terhadap gangguan oleh penyerang.

  1. Pengguna menambah tandatangan digital pada mesej, secara umum - $transfer = $message . "-" . md5($mesej . $sharedSecret); // $transfer = "Telefon saya ialah 1234567" . "-" . md5("Telefon saya ialah 1234567" . "529AeGWg")
  2. Pembekal Perkhidmatan mengambil data, membahagikannya kembali kepada 2 bahagian - $message dan $signature - dan melakukan operasi yang sama: $signatureToMatch = md5($message . $sharedSecret); // $signatureToMatch = md5("Telefon saya ialah 1234567" . "529AeGWg"); Kemudian yang tinggal hanyalah membandingkan nilai $signatureToMatch yang terhasil dengan apa yang ada dalam data $signature yang diterima dan laporkan yang palsu jika nilainya tidak sepadan.

Demonstrasi cara OAuth berfungsi menggunakan aplikasi mudah sebagai contoh

Untuk merasakan OAuth yang sebenar, kami memerlukan dua perkara:
  1. Skrip yang melaksanakan bahagian klien protokol. Saya menulis hanya skrip PHP yang kecil (pautan ke arkib zip). Ini adalah widget yang boleh dimasukkan ke dalam tapak PHP.
  2. Pelayan OAuth ujian tempat kami boleh mencuba. Untuk tujuan ini, adalah mudah untuk menggunakan RuTvit: terdapat halaman http://rutvit.ru/apps/new, yang membolehkan anda menambah aplikasi ujian dalam 30 saat. (Dengan cara ini, anda tidak perlu menentukan URL pulangan dalam borang - kami masih menghantarnya daripada skrip ujian.)
Dengan melihat kod skrip demo dan membaca penjelasan di bawah dalam artikel, anda boleh memahami butiran protokol.

Anda boleh memasukkan widget ini ke dalam mana-mana tapak web PHP dengan hanya menyalin kodnya dan melaraskan reka letak. Semua tweet daripada perkhidmatan RuTvit yang ditag dengan tag cincang yang ditentukan dipaparkan, dan ia juga mungkin untuk menambah tweet baharu (di sinilah OAuth mula bermain). Widget menggunakan keizinan API dan OAuth RuTvit, yang, secara kebetulan, bertepatan dengan standard API Twitter. Anda boleh menjalankan skrip ini pada pelayan ujian anda. Untuk melakukan ini, anda perlu melakukan tiga langkah:

  1. Muat turun kod skrip dan gunakannya ke mana-mana direktori yang mudah di pelayan web.
  2. Daftarkan aplikasi ujian baharu anda dengan pelayan OAuth.
  3. Selepas mendaftarkan aplikasi, gantikan parameter OA_CONSUMER_KEY dan OA_CONSUMER_SECRET dalam skrip dengan nilai yang diterima daripada pelayan.

Pendaftaran dan tetapan aplikasi

Mari kita bincangkan tentang dari mana aplikasi datang dan cara Pembekal Perkhidmatan mengetahui tentangnya. Semuanya agak mudah: Pembekal Perkhidmatan mempunyai borang pendaftaran permohonan khas yang boleh digunakan oleh sesiapa sahaja. Berikut adalah contoh borang sedemikian:


Selepas mendaftarkan permohonan anda, anda diberi 5 parameter yang diperlukan untuk berfungsi dengan OAuth. Inilah rupa mereka:


Di sini, kunci Pengguna dan Rahsia pengguna ialah sejenis "log masuk + kata laluan" aplikasi anda (ingat perbualan di atas tentang token? Ini hanyalah salah satu daripadanya). Biar saya ingatkan anda bahawa Rahsia Pengguna ialah Rahsia Kongsi, hanya diketahui oleh pengirim dan penerima, tetapi tidak kepada orang lain. Baki 3 nilai menentukan URL perkhidmatan, makna yang akan kami pertimbangkan sekarang.

OAuth = Ambil Token Permintaan + Ubah hala ke Keizinan + Ambil Token Akses + API Panggilan

Dalam contoh dengan GMail, kami menggunakan 2 jenis panggilan jauh: a) ubah hala melalui penyemak imbas; b) mengakses API dari dalam skrip.

Dan kami menemui beberapa masalah keselamatan, yang menunjukkan bahawa perlu ada lebih banyak cabaran. Inilah yang berlaku dalam OAuth: permintaan perantaraan tambahan ditambahkan daripada skrip Pengguna kepada Pembekal, beroperasi dengan token. Mari lihat mereka.

  1. Memproses penyerahan borang. Ini bukan sebahagian daripada OAuth, tetapi sebahagian daripada aplikasi kami. Sebelum mengakses Pembekal API, kami mesti menerima perintah kerja daripada pengguna untuk tindakan ini. Berikut ialah contoh "pesanan" sedemikian:
  2. Ambil Token Permintaan (permintaan dalaman).
    • Skrip Pengguna mengakses Minta URL token Pembekal: contohnya, api.rutvit.ru/oauth/request_token. Permintaan itu mengandungi kunci Pengguna - "log masuk aplikasi", dan permintaan itu sendiri ditandatangani menggunakan rahsia Pengguna - "kata laluan aplikasi", yang melindunginya daripada pemalsuan.
    • Sebagai tindak balas, Pembekal menjana dan mengembalikan token "berisi sampah" yang dipanggil Token Permintaan. Kami akan memerlukannya kemudian, jadi kami mesti menyimpannya di suatu tempat - contohnya, dalam pembolehubah sesi $S_REQUEST_TOK.
  3. Ubah hala ke Kebenaran (melalui ubah hala dalam penyemak imbas). Kini aplikasi kami mempunyai Token Permintaan yang unik. Ia diperlukan untuk mendapatkan kebenaran daripada pengguna untuk menggunakan token ini, i.e. tanya dia membenarkan Token Permintaan.
    • Pengguna mengubah hala penyemak imbas kepada yang istimewa Benarkan URL Pembekal: contohnya, api.rutvit.ru/oauth/authorize. Kunci Token Permintaan diluluskan dalam parameter.
    • Pembekal memaparkan borang kebenaran untuk penggunanya dan, jika dia diberi kuasa, mengubah hala penyemak imbas kembali. Dimana sebenarnya? Dan kami menunjukkan ini dalam parameter oauth_callback.
  4. Ambil Token Akses (permintaan dalaman). Jadi, penyemak imbas kembali ke aplikasi kami selepas beberapa siri ubah hala. Ini bermakna bahawa kebenaran pada Pembekal telah berjaya, dan Token Permintaan dibenarkan untuk berfungsi. Walau bagaimanapun, dalam OAuth untuk keselamatan, setiap token mempunyai tujuan tersendiri yang terhad. Sebagai contoh, Token Permintaan digunakan hanya untuk menerima pengesahan daripada pengguna, dan tiada yang lain. Untuk mengakses sumber, kita perlu mendapatkan token baharu - Token Akses - atau, seperti yang mereka katakan, "tukar Token Permintaan untuk Token Akses".
    • Pengguna merujuk kepada Akses URL token- contohnya, api.rutvit.ru/oauth/access_token - dan meminta untuk memberinya Token Akses dan bukannya Token Permintaan yang dia miliki. Permintaan ditandatangani dengan tandatangan digital berdasarkan rahsia Token Permintaan.
    • Pembekal menjana dan mengembalikan Token Akses yang dipenuhi dengan sampah. Ia juga menyatakan dalam jadualnya bahawa Token Akses ini dibenarkan untuk mengakses API. Aplikasi kami mesti mengekalkan Token Akses jika ia akan menggunakan API pada masa hadapan.
  5. Panggilan API (permintaan dalaman). Nah, kini kami mempunyai Token Akses, dan kami boleh memberikan kuncinya apabila memanggil kaedah API.
    • Pengguna menjana permintaan kepada API Penyedia (contohnya, menggunakan permintaan POST mengikut ideologi REST). Permintaan itu mengandungi Kunci Token Akses, dan ia ditandatangani menggunakan Rahsia Kongsi token ini.
    • Pembekal memproses panggilan API dan mengembalikan data kepada aplikasi.

Tamat skrip: keluaran widget

Penghujung skrip hendaklah jelas tanpa penjelasan terperinci.
Penyenaraian 14: Tamat skrip: output widget
// kes akhir ) ) // Dapatkan semua tweet yang tersedia. $text = file_get_contents("http://api.rutvit.ru/search.xml?rpp=5&q=" . urlencode("#" . TAG)); $TWEETS = SimpleXMLElement baharu($teks); // Pintasan untuk memaparkan mesej dengan pengekodan semula dan petikan. fungsi e($text, $quote = 1) ($text = iconv("utf-8", PENGEkodan, $text); echo $quote? htmlspecialchars($text) : $text; ) ?>
status sebagai $tweet) (?>
pengguna->screen_name)?>: text_formatted, 0)?>
?action=form_is_sent" style="margin: 1em 0 0 0">

Pautan berguna pada OAuth

  • rutvit
Tambah tag

Akibatnya, aplikasi pelanggan yang menggunakan API AdWords boleh mengakses akaun AdWords tanpa alamat e-mel dan kata laluan pengguna.

Mencipta Bukti Kelayakan OAuth2

Untuk membuat bukti kelayakan OAuth2, ikut langkah di bawah.

Menentukan Jenis Permohonan

Pertama, anda perlu menentukan jenis permohonan, yang anda ingin buat. Terdapat dua jenis aplikasi dalam API AdWords:

  • aplikasi yang boleh dipasang(disyorkan);
  • aplikasi sesawang.

Gunakan jadual di bawah untuk menentukan jenis aplikasi yang anda perlukan.

Apa yang hendak dipilih Situasi
Aplikasi yang boleh dipasang(disyorkan)
  • Anda mengurus semua akaun AdWords anda dengan satu akaun pengurus peringkat teratas.
  • Adakah anda baru bermula atau mahu bermula dengan cepat?
  • Aplikasi anda akan berfungsi dengan satu set akaun AdWords dengan berbilang pengguna.
aplikasi sesawang
  • Anda ingin menggunakan pengesahan untuk memberikan pengguna yang berbeza hak akses yang berbeza kepada data akaun AdWords anda.
  • Anda perlu membuat beberapa set bukti kelayakan, contohnya untuk mengurus akaun pihak ketiga.
  • Aplikasi anda memerlukan URL panggil balik yang tidak disokong dalam aplikasi yang dipasang.
Perhatian!Walaupun anda sedang membangunkan aplikasi web, anda masih boleh memilih aplikasi yang hendak dipasang. Perbezaan utama ialah sama ada panggilan balik perlu dilakukan selepas token dikeluarkan. Contohnya, jika anda menggunakan satu akaun pengurus peringkat atas untuk mengurus semua akaun AdWords anda, aplikasi yang anda pasang mesti didaftarkan, walaupun jika aplikasi pelanggan boleh diakses melalui Internet. Catatan.dibincangkan di bawah. Jika anda tidak memerlukan kefungsian akaun perkhidmatan, kami amat mengesyorkan anda menggunakan proses kebenaran untuk pemasangan atau aplikasi web.

Mencipta ID pelanggan dan kod rahsia

Sebaik sahaja anda telah menentukan jenis aplikasi anda, klik pada tab yang sesuai di bawah dan ikut arahan untuk mencipta ID dan Rahsia Pelanggan.

Aplikasi yang boleh dipasang

  1. Buka
  2. Buat projek Buat.
  3. Cipta Bukti Kelayakan, dan kemudian - ID Pelanggan OAuth.
  4. Jimat
  5. Dalam bab Jenis permohonan pilih Jenis lain dan memberikan maklumat yang diperlukan.
  6. klik Buat.
  7. pengecam Dan Kunci rahsia
aplikasi sesawang
  1. Buka
  2. Daripada menu lungsur turun projek, pilih Buat projek, kemudian nyatakan nama projek dan tukar IDnya jika perlu, kemudian klik butang Buat.
  3. Pada halaman Bukti kelayakan, pilih Cipta Bukti Kelayakan, dan kemudian - ID Pelanggan OAuth.
  4. Anda mungkin diminta untuk memberikan nama produk. Dalam kes ini, klik Sesuaikan tetingkap permintaan akses, masukkan maklumat yang diminta dan klik Jimat untuk kembali ke skrin Bukti kelayakan.
  5. Dalam bab Jenis permohonan pilih aplikasi sesawang. Ikut arahan untuk menentukan sumber JavaScript dan/atau ubah hala URI.
  6. klik Buat.
  7. Pada halaman yang muncul, salin pengecam Dan Kunci rahsia klien - anda memerlukannya semasa menyediakan perpustakaan klien.

Ikut arahan di bawah untuk mengkonfigurasi penggunaan bukti kelayakan OAuth2 dengan pustaka klien bahasa anda.

Catatan.Jika anda memilih untuk tidak menggunakan salah satu perpustakaan pelanggan kami, anda perlu melaksanakan proses untuk atau diri anda sendiri.

Taman Permainan OAuth2

Pilihan alternatif untuk membuat bukti kelayakan OAuth2 ialah menggunakan Taman Permainan OAuth2. Digabungkan dengan Google API Console, sistem ini membolehkan anda membuat token OAuth2 sendiri.

Sistem OAuth2 Playground direka untuk pengguna yang memerlukan akses kepada akaun sahaja satu akaun pengurus atau pengguna AdWords. Jika anda perlu meminta bukti kelayakan untuk berbilang pengguna, maka lebih baik menggunakan perpustakaan klien seperti yang diterangkan di atas.

tetapan

Amaran.Untuk menggunakan Taman Permainan OAuth2, anda perlu buat id pelanggan Untuk . ini hanya satu sejenis aplikasi yang berfungsi dengan OAuth2 Playground. Baca lebih lanjut dalam bahagian di atas.

Bagaimana untuk mendapatkan ID pelanggan dan kunci rahsia

  1. Buka
  2. Pilih projek sedia ada daripada menu lungsur turun atau buat projek baharu.
  3. Pada halaman Bukti kelayakan, pilih Cipta Bukti Kelayakan, dan kemudian - ID Pelanggan OAuth.
  4. Dalam bab Jenis permohonan pilih aplikasi sesawang.
  5. Dalam bahagian itu, tambahkan baris berikut: https://site/oauthplayground
  6. klik Buat.
  7. Tuliskannya pengecam Dan Kunci rahsia pelanggan yang ditunjukkan pada halaman yang muncul. Anda akan memerlukannya dalam langkah seterusnya.

Cara membuat token

Amaran.Akaun Google yang anda log masuk dalam penyemak imbas anda akan menentukan akaun AdWords yang boleh anda akses menggunakan bukti kelayakan OAuth2 yang anda buat. Mungkin lebih baik untuk melengkapkan langkah ini dalam mod inkognito atau tanpa log masuk ke Akaun Google anda. Kemungkinan besar anda perlu menggunakan bukti kelayakan yang berbeza daripada akaun yang anda gunakan semasa anda menerima ID Pelanggan dan Kunci Rahsia.

Bagaimana untuk mengalih keluar Taman Permainan OAuth2 daripada ID Pelanggan

Memandangkan anda sudah mempunyai token muat semula, anda tidak perlu lagi menggunakan OAuth2 Playground sebagai URI ubah hala anda yang telah diselesaikan. Untuk mengalih keluar sistem ini daripada senarai, ikuti langkah berikut:

  1. Pergi ke .
  2. Pilih projek anda daripada menu lungsur.
  3. Pada halaman Bukti kelayakan, pilih nama ID pelanggan.
  4. Alih keluar https://site/oauthplayground daripada medan URI ubah hala yang dibenarkan. Sila ambil perhatian bahawa anda mesti meninggalkan sekurang-kurangnya satu Ubah hala URI.
  5. klik Jimat.

Jadi anda mempunyai bukti kelayakan OAuth anda. Anda kini boleh menanyakan API AdWords dan menggunakannya terhadap pustaka pelanggan yang diperlukan.

Akaun perkhidmatan OAuth2

Bahagian ini menerangkan cara untuk mengakses API AdWords menggunakan akaun perkhidmatan.

Akaun perkhidmatan ialah akaun yang dimiliki oleh aplikasi dan bukan milik pengguna akhir individu. Akaun perkhidmatan menyediakan interaksi antara aplikasi web dan perkhidmatan Google. Aplikasi anda memanggil API bagi pihak akaun perkhidmatan tanpa melibatkan pengguna secara langsung.

API AdWords membenarkan akses akaun perkhidmatan merentas domain G Suite.

Akaun perkhidmatan melaksanakan proses OAuth2, yang bukannya membenarkan pengguna menggunakan fail utama yang hanya boleh diakses oleh aplikasi anda.

Menggunakan akaun perkhidmatan memberikan dua kelebihan penting:

  • Keizinan akses aplikasi kepada Google API dilakukan semasa fasa persediaan. Ini mengelakkan kerumitan memerlukan campur tangan pengguna atau menyimpan token dalam aliran OAuth2 lain.
  • Penyamaran pengguna lain dalam aplikasi, jika perlu, dilakukan sebagai sebahagian daripada proses kelulusan OAuth2.
Catatan. Jika anda tidak menggunakan ciri khusus domain, seperti penyamaran, bukannya akaun perkhidmatan, adalah sangat disyorkan untuk menggunakan proses untuk . Sebagai sebahagian daripada proses pemasangan dan aplikasi web OAuth2, penyertaan pengguna diperlukan sekali sahaja - pada masa memberikan akses kepada akaun.

Alternatif kepada akaun perkhidmatan

Akaun perkhidmatan digunakan secara meluas untuk menyediakan akses terprogram kepada API menggunakan protokol OAuth2 tanpa campur tangan pengguna.

Walau bagaimanapun, menyediakan akaun sedemikian untuk berfungsi dengan API AdWords bukanlah mudah. Alternatif yang lebih mudah adalah dengan token penyegaran berterusan. Pendekatan ini membolehkan aplikasi meminta token akses baharu pada bila-bila masa.

Sebagai sebahagian daripada proses ini, anda perlu mengkonfigurasi kebenaran aplikasi melalui pustaka klien seperti yang diterangkan di atas. Ini hanya perlu dilakukan sekali kerana token muat semula Google OAuth2 tidak pernah tamat tempoh.

Keperluan

  • Domain G Suite yang anda miliki, seperti mydomain.com atau mybusiness.com.
  • Token pembangun API AdWords dan sebaik-baiknya akaun ujian.
  • untuk bahasa yang digunakan.

Menyediakan akses untuk akaun pelanggan

Mula-mula, anda perlu membuat kunci akaun perkhidmatan dalam Konsol API Google.

  1. Log masuk ke akaun G Suite anda, buka .
  2. Daripada menu lungsur turun projek, pilih Buat projek, kemudian berikan maklumat yang diperlukan dan klik butang Buat. Projek baharu akan muncul dalam senarai aktif.
  3. Daripada menu di penjuru kiri sebelah atas, pilih IAM dan pentadbiran, dan kemudian - Akaun perkhidmatan dalam menu di sebelah kiri.
  4. klik Buat akaun perkhidmatan di bahagian atas halaman.
  5. Masukkan nama akaun perkhidmatan.
  6. Semak kotak Buat kunci peribadi baharu dan pilih jenis kunci JSON.
  7. Semak kotak Dayakan perwakilan akses data dalam domain G Suite anda dan berikan nama produk untuk tetingkap permintaan akses.
  8. klik Buat. Fail kunci JSON akan mula dimuat turun. Simpan fail di tempat yang selamat di mana hanya anda mempunyai akses.
  9. Pada halaman Akaun perkhidmatan akaun perkhidmatan baharu akan muncul.
Catatan. Kerana penyamaran pengguna boleh dikawal sahaja Di peringkat domain, untuk menggunakan akaun perkhidmatan dan proses kelulusan dengan perkhidmatan Google OAuth2, anda memerlukan domain anda sendiri yang didaftarkan dengan G Suite. Semua pengguna domain yang menggunakan akaun perkhidmatan dengan kebenaran yang sesuai boleh menyamar sebagai mana-mana pengguna domain.

Isu keselamatan

Oleh kerana G Suite diurus pada peringkat domain, anda mesti melindungi fail kunci yang membenarkan akaun yang dibenarkan mengakses perkhidmatan Google dengan selamat. Ini amat penting kerana kami menyediakan akaun perkhidmatan dengan keupayaan untuk menyamar sebagai pengguna domain.

Di samping itu, adalah disyorkan bahawa setiap akaun perkhidmatan mempunyai akses kepada hanya satu API Google. Medan digunakan untuk ini skop, yang diterangkan dalam bahagian seterusnya. Langkah pencegahan ini membolehkan anda mengehadkan jumlah data yang dibuka kepada akses tanpa kebenaran sekiranya fail utama dikompromi.

Cara menyediakan keupayaan penyamaran

Untuk memberikan keupayaan penyamaran kepada akaun perkhidmatan, ikut langkah berikut:

Anda kini boleh mengakses akaun AdWords anda menggunakan akaun perkhidmatan anda sebagai sebahagian daripada proses kelulusan OAuth2.

Menyediakan perpustakaan pelanggan

Pilih bahasa untuk melihat arahan untuk menyediakan pustaka klien.

Catatan.Jika anda memilih untuk tidak menggunakan salah satu perpustakaan pelanggan kami, anda perlu melaksanakan proses itu sendiri.

Mengoptimumkan permintaan OAuth2

Jika apl anda tidak menggunakan perkongsian bukti kelayakan, ia boleh meningkatkan bilangan permintaan yang dihantar kepada Google dengan ketara. Akibatnya, pelayan kami mungkin mengenakan sekatan ke atas aplikasi sedemikian, yang akan mengurangkan kelajuan operasinya.

Bahagian ini menerangkan cara mengoptimumkan pengurusan bukti kelayakan OAuth2 supaya aplikasi anda berinteraksi dengan lebih berkesan dengan API AdWords.

Perhatian!Di bawah istilah kelayakan Ini merujuk kepada keseluruhan set atribut bukti kelayakan OAuth2, termasuk token akses dan tarikh tamat tempohnya.

Strategi pengedaran kelayakan

Mengedarkan bukti kelayakan merentas permintaan API meningkatkan prestasi dan juga mengelakkan overhed dan ralat akibat pelanggaran kekangan.

Strategi pengedaran kelayakan bergantung pada reka bentuk aplikasi.

Dalam aplikasi berbilang benang, anda mesti menggunakan bukti kelayakan yang sama untuk setiap sesi urutan.

Dalam aplikasi berbilang proses dan diedarkan, adalah perlu untuk melaksanakan beberapa infrastruktur untuk menghantar bukti kelayakan antara proses. Di samping itu, anda mesti memastikan bahawa benang tidak disekat dan keadaan perlumbaan berlaku.

Dalam aplikasi yang berbilang proses/edar dan berbilang benang, setiap proses perlu menggabungkan kedua-dua strategi.

Berikut ialah strategi untuk mengesahkan satu akaun AdWords, seperti akaun pengurus peringkat atas dalam hierarki.

Ia kemudian menerangkan cara menyesuaikan strategi ini untuk .

Aplikasi Berbilang Benang

Dalam aplikasi berbilang benang, bukti kelayakan mesti tersedia untuk urutan yang berbeza. Kemas kini kelayakan mesti dilakukan secara serentak untuk mengelakkan keadaan perlumbaan.

Gambar rajah ini menunjukkan urutan yang menghantar permintaan kepada API AdWords pada masa jalan. Kumpulan sesi kongsi (pengguna) digunakan. Ambil perhatian bahawa setiap sesi mesti menggunakan objek bukti kelayakan yang sama. Sebagai tindak balas kepada setiap permintaan API, urutan menerima sesi yang sepadan (pengguna). Jika token akses perlu dimuat semula, ia mesti dilakukan secara serentak untuk mengelakkan keadaan perlumbaan. Dalam erti kata lain, objek bukti kelayakan mestilah selamat untuk benang.

Pustaka pelanggan memudahkan untuk menghantar bukti kelayakan antara benang. Setiap pustaka pelanggan mempunyai objek sesi (atau pengguna) dengan bukti kelayakan yang digunakan semula sepanjang kitaran hayatnya. Untuk menggunakan bukti kelayakan merentas sesi, anda mesti menggunakannya semasa membuat setiap sesi. Dalam semua pustaka pelanggan, bukti kelayakan ialah objek selamat benang yang dikemas kini secara serentak apabila token akses tamat tempoh.

Contohnya, dalam pustaka klien Java anda akan mencipta kelas Kredensial tunggal dan menggunakannya untuk semua sesi.

Aplikasi berbilang proses dan diedarkan

Dalam aplikasi berbilang proses dan diedarkan, pengedaran kelayakan mesti berterusan. Untuk mengelakkan situasi perlumbaan di mana berbilang pelayan cuba mengemas kini bukti kelayakan pada masa yang sama (mengakibatkan permintaan kemas kini yang berlebihan), adalah disyorkan untuk memaksa kemas kini dan memberikan bukti kelayakan yang dikemas kini kepada semua proses dan pelayan.

Contohnya, satu tugas atau perkhidmatan mungkin mengemas kini bukti kelayakan secara berkala dan menolaknya ke stor data di mana ia akan digunakan oleh pelayan yang berbeza.

Rajah menunjukkan pengemaskinian berkala kelayakan dan merekodkan sifatnya dalam stor data. Semua pelayan kemudian menerima bukti kelayakan sebelum membuat permintaan kepada API.

Kemas kini tugas

Tugas kemas kini mengemas kini bukti kelayakan secara berkala dan menghantarnya ke stor data. Tugasan ini tidak seharusnya menunggu kelayakan semasa tamat tempoh, kerana ini akan menyebabkan aplikasi tidak berfungsi untuk beberapa lama kerana kekurangan bukti kelayakan yang sah.

Alternatif terbaik ialah memaksa penyegaran semula berkala, yang menggantikan kelayakan dalam stor data dengan yang baharu setiap kali. Tugas kemas kini harus dilakukan dengan baik sebelum kelayakan semasa tamat tempoh supaya terdapat masa yang mencukupi sekiranya ralat sementara berlaku. Anda boleh mula dengan melakukan kemas kini setiap 15 minit.

Catatan.Jika token akses bukti kelayakan tamat tempoh semasa permintaan API sedang diproses, permintaan itu akan tetap dilaksanakan. Sebagai contoh, jika anda membuat pertanyaan yang berjalan lama dan mempunyai kurang daripada satu minit untuk mengakses, keputusan masih akan dikembalikan.

Simpanan data

Storan data digunakan untuk menyediakan bukti kelayakan kepada proses dan pelayan yang berbeza.

Untuk melakukan ini, anda boleh menggunakan gudang data sedia ada atau mencipta gudang khusus yang melaluinya pelayan akan menerima bukti kelayakan. Penyelesaian yang mungkin termasuk pelayan caching (seperti Memcached atau Infinispan) dan stor data NoSQL (seperti MongoDB).

Tujuan utama gudang data adalah untuk menyediakan antara muka yang boleh dipercayai kepada semua pelayan yang mengakses API. Operasinya perlu dioptimumkan untuk membaca data dengan cepat: pelayan dan proses akan membaca bukti kelayakan lebih kerap daripada dikemas kini.

Ingat untuk memastikan kelayakan anda selamat.

Apabila menyimpan bukti kelayakan, anda mesti menyimpan sifat expiry_time (masa semasa + expires_in) dan refresh_token bersama dengan sifat access_token. Sifat expiry_time (tarikh tamat tempoh token) dikira menggunakan formula berikut: masa permintaan kemas kini access_token + expires_in time (tarikh tamat tempoh token).

Kolam pelayan

Setiap pelayan dalam kumpulan mendapatkan bukti kelayakan terkini daripada stor data sebelum menghantar permintaan. Selagi tugas kemas kini berjalan dengan jayanya, bukti kelayakan akan sah. Walau bagaimanapun, jika tugas kemas kini atau stor data gagal, mesti ada mekanisme sandaran.

Jika pelayan atau proses tidak dapat mendapatkan bukti kelayakan daripada stor data, atau jika bukti kelayakan telah tamat tempoh, pelayan mesti mengemas kini bukti kelayakannya untuk membolehkan aplikasi terus bekerja dengan API sehingga masalah diselesaikan.

Dalam proses berbilang benang, anda mesti menggunakan strategi yang sama untuk mengedarkan bukti kelayakan antara benang.

Pengesahan Akaun Berbilang

Bukti kelayakan yang dibuat untuk akaun pengurus AdWords boleh digunakan untuk mengakses semua akaun anak. Pengguna yang mempunyai satu akaun pengurus lazimnya hanya perlu membuat bukti kelayakan untuk akaun pengurus peringkat atas untuk membenarkan permohonan untuk semua akaun AdWords bawahan.

Dalam kes lain, aplikasi memerlukan akses kepada akaun AdWords yang tidak berkaitan antara satu sama lain dalam hierarki akaun pengurus. Keadaan ini memerlukan anda membuat dan mengekalkan berbilang bukti kelayakan untuk akaun yang berbeza, seperti untuk setiap akaun pelanggan AdWords yang anda boleh akses atau untuk setiap akaun pengurus peringkat atas dalam hierarki bebas.

Anda boleh berpegang pada strategi ini untuk kedua-dua aplikasi dengan perubahan yang minimum. Apabila menggunakan storan kongsi, bukti kelayakan mesti diindeks oleh ID pelanggan akaun untuk memastikan bukti kelayakan dikaitkan dengan akaun yang diingini. Di samping itu, tugas kemas kini mesti mengemas kininya tepat pada masanya. Selepas menyambungkan akaun baharu, anda mungkin perlu melancarkannya.

Akhir sekali, dalam aplikasi berbilang benang, anda perlu mengedarkan objek bukti kelayakan hanya antara utas yang berjalan dalam akaun yang dikaitkan dengannya.

Cara OAuth2 berfungsi

Catatan. API AdWords belum lagi menyokong log masuk serentak melalui permintaan akses data (reka bentuk hibrid) atau perwakilan kuasa peringkat domain (2LO).

Skop

Token akses boleh memberikan pelbagai peringkat akses kepada data. Parameter skop pembolehubah mentakrifkan set sumber dan operasi yang token menyediakan akses. Apabila meminta token akses, aplikasi anda menghantar satu atau lebih nilai ke parameter skop.

Di bawah ialah skop semasa dan lama untuk API AdWords.

Akses luar talian

Aplikasi pelanggan yang menggunakan API AdWords biasanya meminta akses luar talian. Ini boleh berlaku jika aplikasi anda perlu menjalankan kerja kelompok semasa pengguna menyemak imbas tapak anda tanpa sambungan Internet.

Apl yang dipasang menggunakan akses luar talian secara lalai.

Pengepala permintaan HTTP

Pengepala HTTP dalam setiap permintaan kepada pelayan API AdWords mesti mengandungi borang berikut:

Keizinan: Pembawa THE_ACCESS_TOKEN

POST ... Hos HTTP/1.1: ... Keizinan: Pembawa 1/fFAGRNJru1FTz70BzhT3Zg Jenis Kandungan: text/xml;charset=UTF-8 Panjang Kandungan: ...

Akses dan muat semula token

Dalam kebanyakan kes, token muat semula perlu disimpan di tempat yang selamat kerana ia mungkin diperlukan kemudian. Untuk mendapatkan maklumat lanjut tentang meminta akses dan muat semula token, lihat panduan berikut:

Apabila token akses tamat tempoh

Token akses mempunyai tarikh tamat tempoh yang bergantung pada nilai expires_in . Token akses yang telah tamat tempoh boleh dimuat semula menggunakan token muat semula, tetapi perpustakaan pelanggan kami melakukannya secara automatik.

Kecuali seperti yang dinyatakan sebaliknya, kandungan halaman ini dilesenkan di bawah Lesen Creative Commons Attribution 3.0 dan sampel kod dilesenkan di bawah Lesen Apache 2.0. Untuk butiran, lihat kami. Java ialah tanda dagangan berdaftar Oracle dan/atau sekutunya.

Dikemas kini pada 24 September 2018


  1. Membuka penyemak imbas terbina dalam dengan halaman log masuk
  2. Pengguna diminta untuk mengesahkan bahawa hak telah diberikan.
  3. Jika pengguna bersetuju, penyemak imbas dialihkan ke halaman rintisan dalam serpihan (selepas #) yang URLnya ditambahkan token akses
  4. Aplikasi memintas ubah hala dan menerima token akses daripada alamat halaman
Pilihan ini memerlukan menaikkan tetingkap penyemak imbas dalam aplikasi, tetapi tidak memerlukan bahagian pelayan dan panggilan pelayan-ke-pelayan tambahan untuk pertukaran kod kebenaran pada token akses.
Contoh
Buka penyemak imbas dengan halaman log masuk:
> DAPATKAN /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Hos: connect.mail.ru

Selepas pengguna memberikan kebenaran, ubah hala berlaku ke halaman rintisan standard, untuk Mail.Ru ini adalah connect.mail.ru/oauth/success.html:
< HTTP/1.1 302 Found < Location: http://connect.mail.ru/oauth/success.html#access_token=FJQbwq9&token_type=bearer& expires_in=86400&refresh_token=yaeFa0gu

Permohonan mesti memintas ubah hala terakhir dan mendapatkan daripada alamat token akses dan menggunakannya untuk mengakses sumber yang dilindungi.

Kebenaran melalui log masuk dan kata laluan

Keizinan melalui log masuk dan kata laluan adalah permintaan POST yang mudah, akibatnya ia dikembalikan token akses. Skim ini bukanlah sesuatu yang baharu, tetapi disertakan dalam piawaian untuk keluasan dan disyorkan untuk digunakan hanya apabila pilihan kebenaran lain tidak tersedia.
Contoh
> POST /oauth/token HTTP/1.1 > Hos: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=password&client_id=31337&client_secret=deadbeef&username=api@corp.mail.ru& password= qwerty< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"SlAV32hkKG", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"8xLOxBtZp8", < }
Penerangan dalam spesifikasi

Memulihkan kebenaran sebelumnya

Biasanya, token akses mempunyai jangka hayat yang terhad. Ini boleh berguna, sebagai contoh, jika ia dihantar melalui saluran terbuka. Untuk mengelak daripada memaksa pengguna untuk log masuk selepas tamat tempoh token akses"dan, dalam semua pilihan di atas, sebagai tambahan kepada token akses"boleh balik lagi token muat semula. Anda boleh menggunakannya untuk mendapatkan token akses menggunakan permintaan HTTP, serupa dengan kebenaran menggunakan log masuk dan kata laluan.
Contoh
> POST /oauth/token HTTP/1.1 > Hos: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBtZp8< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }