mata teras
Dapatkan kelayakan pengguna
Poskan ke Twitter bagi pihak pengguna tanpa meminta gabungan nama pengguna dan kata laluan setiap kali, ia memerlukan "kunci valet" ... kunci ini adalah oauth. Dalam istilah OAuth, aplikasi klien anda dipanggil pengguna , pengguna dipanggil pemilik sumber , dan Twitter adalah pelayan atau penyedia perkhidmatan . Sebelum Twitter menerima maklumat yang disiarkan oleh permohonan anda, anda perlu mendapatkan kelayakan pelanggan anda sendiri: Kunci Pengguna dan Kunci Pengguna . Twitter (dan kebanyakan perkhidmatan yang menyediakan API awam) memberi anda kunci dan kunci selepas anda melengkapkan borang pendaftaran (boleh didapati di dev.twitter.com/apps). Di Twitter, anda perlu memberikan beberapa maklumat untuk mengenal pasti permohonan anda, terutamanya namanya, keterangan, dan URL laman web, kepada pengguna semasa proses kebenaran. Anda juga perlu memasukkan URL panggil balik, yang akan saya jelaskan kemudian. Selepas menyerahkan borang permohonan Buat, anda akan dibawa ke halaman butiran permohonan baru. Tatal ke bawah untuk mencari kunci dan kunci pengguna anda. Anda akan memerlukan kunci ini bersama -sama dengan sebilangan kecil URL titik akhir yang disenaraikan. Perhatikan bahawa permohonan itu diberikan akses baca sahaja secara lalai;
Permohonan yang diberi kuasa
Kekunci pengguna dan kekunci pengguna membenarkan permohonan anda berkomunikasi dengan API Twitter, tetapi kunci ini sahaja tidak boleh menyiarkan tweet bagi pihak pengguna lain. Anda memerlukan kelayakan akses:Token akses dan kekunci akses . Untuk mendapatkan kelayakan ini dengan menggunakan kelayakan pengguna untuk mengadakan perbualan ringkas dengan pengguna Twitter dan akhir, buat permintaan kepada penyedia perkhidmatan (Twitter). Mendapatkan kelayakan akses boleh menjadi agak rumit, tetapi bernasib baik anda hanya perlu melakukan ini sekali untuk setiap pengguna. Anda boleh menyimpan kelayakan selama -lamanya untuk kegunaan kemudian tanpa pengguna mengesahkan permohonan anda. Perbualan yang meminta akses kepada kelayakan memerlukan set kelayakannya sendiri: permintaan token dan permintaan kunci .
Kebenaran Langkah 1: Permintaan Kelayakan
Proses kebenaran biasanya bermula dengan mengarahkan pengguna ke halaman "Kebenaran Twitter". Ini adalah halaman yang anda buat yang memulakan token permintaan dari Twitter dan memulakan proses kebenaran OAuth. Ia mesti menjana URL untuk mendapatkan kelayakan yang diminta, dan sebaik sahaja anda mempunyai kelayakan, anda boleh mengarahkan pengguna ke Twitter untuk memberikan kebenaran penerbitan permohonan. Permintaan permintaan kelayakan memerlukan permintaan tandatangan, yang bermaksud anda perlu menghantar tandatangan OAuth bersama -sama dengan parameter penting lain dalam permintaan. Tandatangan adalah senarai hash yang dikodkan oleh Base64 parameter yang diminta. Dalam kes Twitter, algoritma hashing adalah HMAC-SHA1. Proses tandatangan menghalang orang lain daripada menyamar sebagai aplikasi anda untuk menggunakan kelayakan anda, walaupun kunci pengguna dipindahkan dalam teks biasa. Hanya anda (pengguna) dan pelayan (Twitter) boleh menghasilkan semula tandatangan, kerana anda berdua adalah satu -satunya entiti yang harus mengetahui kunci pengguna yang mempunyai tandatangan. Mari kita bina rentetan di mana tandatangannya berdasarkan:<?php $requestTokenUrl = "http://api.twitter.com/oauth/request_token"; $authorizeUrl = "http://api.twitter.com/oauth/authorize"; $oauthTimestamp = time(); $nonce = md5(mt_rand()); $oauthSignatureMethod = "HMAC-SHA1"; $oauthVersion = "1.0"; $sigBase = "GET&" . rawurlencode($requestTokenUrl) . "&" . rawurlencode("oauth_consumer_key=" . rawurlencode($consumerKey) . "&oauth_nonce=" . rawurlencode($nonce) . "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod) . "&oauth_timestamp=" . $oauthTimestamp . "&oauth_version=" . $oauthVersion);
Beberapa pembolehubah di atas mungkin agak jelas - $ requestTokenurl diambil dari Twitter apabila anda mendapat kelayakan pengguna, dan $ oauthtimestamp adalah timestamp UNIX semasa. Item yang kurang jelas adalah $ nonce, yang tidak lebih daripada rentetan rawak yang hanya digunakan sekali (setiap transaksi menggunakan nonce yang berbeza). Umumnya, nombor rawak hash MD5 sangat berguna sebagai nonce. Terdapat juga $ oauthsignaturemethod, yang selalu hmac-sha1 untuk twitter, dan $ oauthersion untuk twitter, kini v1.0 untuk twitter. Seterusnya, rentetan yang ditandatangani dibina sebagai $ sigbase. Oauth menunjukkan bahawa asas tandatangan mestilah kaedah HTTP (dalam kes ini), diikuti dengan "&" diikuti oleh URL permintaan yang dikodkan URL ($ requestTokenurl), diikuti oleh yang lain "&", dan akhirnya senarai yang dikodkan dan abjad Perhatikan bahawa apabila OAuth memerlukan kandungan yang dikodkan URL, ia merujuk kepada RFC-3986. Fungsi Rawurlencode () PHP berfungsi kerana ia mengkodekan ruang sebagai ", bukannya", seperti urlencode (). Anda juga memerlukan kunci tandatangan. Kuncinya sentiasa menjadi kunci pengguna diikuti oleh "&", dan 1) kunci token oauth (yang merupakan sebahagian daripada kelayakan token yang belum anda miliki), atau 2) apa -apa. Anda kemudian boleh menggunakan fungsi hash_hmac () terbina dalam PHP untuk menghasilkan tandatangan akhir.
<?php $sigKey = $consumerSecret . "&"; $oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));
Anda meletakkan semua bahagian bersama untuk membina URL yang meminta kelayakan:
<?php $requestUrl = $requestTokenUrl . "?" . "oauth_consumer_key=" . rawurlencode($consumerKey) . "&oauth_nonce=" . rawurlencode($nonce) . "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod) . "&oauth_timestamp=" . rawurlencode($oauthTimestamp) . "&oauth_version=" . rawurlencode($oauthVersion) . "&oauth_signature=" . rawurlencode($oauthSig); $response = file_get_contents($requestUrl);
Anda memerlukan lebih banyak pengendalian ralat untuk apa -apa di luar demo mudah ini, tetapi buat masa ini, saya mengandaikan bahawa tidak akan ada sebarang kesilapan dan anda dapat menerima kelayakan permintaan sementara dalam $ respons. Tanggapan yang dihantar oleh Twitter adalah seperti berikut:
<code>oauth_token=mjeaYNdNYrvLBag6xJNWkxCbgL5DV6yPZl6j4palETU&oauth_token_secret=W45dnBz917gsdMqDu4bWNmShQq5A8pRwoLnJVm6kvzs&oauth_callback_confirmed=true</code>
oauth_token dan oauth_token_secret diekstrak dari respons dan digunakan untuk membina pautan seterusnya pengguna mengakses dalam langkah kedua proses kebenaran. Adalah lebih baik untuk menyimpan kelayakan yang diminta dalam sesi pengguna supaya mereka boleh digunakan apabila pengguna kembali dari halaman kebenaran Twitter. URL Kebenaran boleh didapati di halaman Butiran selepas mendaftarkan permohonan anda menggunakan Twitter.
<?php parse_str($response, $values); $_SESSION["requestToken"] = $values["oauth_token"]; $_SESSION["requestTokenSecret"] = $values["oauth_token_secret"]; $redirectUrl = $authorizeUrl . "?oauth_token=" . $_SESSION["requestToken"]; header("Location: " . $redirectUrl);
Sekarang aplikasinya boleh menghantar pengguna ke Twitter untuk kebenaran, ini adalah masa yang baik untuk menambah URL panggil balik supaya Twitter dapat menghantarnya kembali ke aplikasinya! URL Callback adalah tidak lebih daripada alamat yang Twitter mengarahkan pengguna selepas pengguna membenarkan permohonan anda untuk menghantar tweet bagi pihaknya dan ditentukan pada tab Tetapan halaman Butiran. Apabila Twitter mengalihkan pengguna ke URL panggil balik, ia menambah dua parameter tambahan: OAUTH_TOKEN dalam permintaan awal anda, yang boleh digunakan untuk pengesahan, dan oAuth_verifier, yang boleh digunakan untuk kelayakan kebenaran. Dalam tiga set kredensial, anda perlu menyiarkan tweet, anda kini mempunyai kelayakan dua orang dan meminta kelayakan. Seterusnya: Kelayakan Akses!
Kebenaran Langkah 2: Kelayakan Akses
Untuk mendapatkan kelayakan akses, anda memerlukan OAUTH_TOKEN, OAUTH_TOKEN_SECRET dan OAUTH_VERIFIER yang baru diperolehi. Langkah ini memerlukan permintaan tandatangan lain, kali ini untuk URL Token Akses yang dipaparkan pada halaman Butiran.
<?php $requestTokenUrl = "http://api.twitter.com/oauth/request_token"; $authorizeUrl = "http://api.twitter.com/oauth/authorize"; $oauthTimestamp = time(); $nonce = md5(mt_rand()); $oauthSignatureMethod = "HMAC-SHA1"; $oauthVersion = "1.0"; $sigBase = "GET&" . rawurlencode($requestTokenUrl) . "&" . rawurlencode("oauth_consumer_key=" . rawurlencode($consumerKey) . "&oauth_nonce=" . rawurlencode($nonce) . "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod) . "&oauth_timestamp=" . $oauthTimestamp . "&oauth_version=" . $oauthVersion);
$ AccessTokenurl adalah titik akhir seterusnya yang diperoleh dari halaman butiran. Menjana $ OAuthTimeStamp baru dan $ nonce dan hantar semula $ OAuthVerifier dari halaman kebenaran Twitter. Tidak disenaraikan, tetapi dalam array $ _Session, adalah kelayakan permintaan dari langkah sebelumnya, yang juga diperlukan. Langkah ini dalam proses kebenaran memerlukan permintaan tandatangan yang lain. Sebaik sahaja tandatangan dibina, ia akan digunakan dengan permintaan kelayakan akses.
<?php $sigKey = $consumerSecret . "&"; $oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));
Respons ini kali ini mengandungi skrin_name yang sangat berguna, user_id dan kelayakan akses yang lama ditunggu-tunggu!
Ringkasan
Artikel ini menamatkan bahagian kebenaran. Setakat ini, anda telah belajar bagaimana untuk membuat aplikasi Twitter baru dan melangkah melalui "tarian" OAuth dengan kelayakan pengguna yang disediakan untuk mendapatkan kelayakan akses. Di bahagian kedua dan terakhir siri ini, saya akan membincangkan cara menggunakan kelayakan akses untuk menyiarkan tweet ke aliran Twitter pengguna.
(gambar asal harus dikekalkan di sini, tetapi kerana gambar tidak dapat dipaparkan secara langsung, pautan gambar dikekalkan)
oauth 1.0 Soalan Lazim (Soalan Lazim)
(Kandungan FAQ asal harus dikekalkan di sini, tetapi disebabkan oleh panjang artikel, bahagian FAQ ditinggalkan di sini demi kesederhanaan.)
Atas ialah kandungan terperinci PHP Master | Memahami OAuth - Tweeting dari awal, Bahagian 1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!