Rumah >pembangunan bahagian belakang >tutorial php >PHP Master | Memahami OAuth - Tweeting dari awal, Bahagian 1

PHP Master | Memahami OAuth - Tweeting dari awal, Bahagian 1

Lisa Kudrow
Lisa Kudrowasal
2025-03-02 08:39:10247semak imbas

PHP Master | Understanding OAuth - Tweeting from Scratch, Part 1

mata teras

    oAuth adalah seperti "kunci valet" yang membolehkan aplikasi PHP menyiarkan ke Twitter bagi pihak pengguna tanpa perlu memasukkan nama pengguna dan kata laluan setiap kali. Aplikasi adalah pengguna, pengguna adalah pemilik sumber, dan Twitter adalah pelayan atau penyedia perkhidmatan.
  • Untuk menyiarkan maklumat di Twitter, aplikasi perlu mendapatkan kelayakan pelanggan sendiri: kunci pengguna dan kunci pengguna. Twitter memberikan kelayakan ini selepas permohonan melengkapkan borang pendaftaran dan memberikan maklumat seperti namanya, keterangan, URL laman web, dan URL panggil balik.
  • Kunci Pengguna dan Kunci Pengguna membenarkan permohonan untuk berkomunikasi dengan API Twitter, tetapi untuk menyiarkan tweet bagi pihak pengguna, ia juga memerlukan kelayakan akses: token akses dan kekunci akses. Ini diperoleh dengan menggunakan kelayakan pengguna untuk bercakap dengan pengguna Twitter dan akhir.
  • Artikel ini menyediakan panduan langkah demi langkah terperinci mengenai cara mendapatkan kelayakan ini, termasuk kod yang diperlukan untuk menjana URL Kredensial Permintaan, bagaimana untuk membina tandatangan berdasarkan rentetan, dan cara membuat URL yang meminta kelayakan akses.
Ramai orang berfikir bahawa OAuth sukar difahami, mungkin kerana orang mengharapkan bahawa abstraksi yang disediakan oleh perpustakaan pihak ketiga akan menghapuskan keperluan untuk memahami langkah-langkah transaksi OAuth-tetapi itu tidak berlaku. Artikel ini dibahagikan kepada dua bahagian, menunjukkan bagaimana OAuth V1 berfungsi dengan menyambungkan aplikasi PHP ke API Twitter menggunakan hanya beberapa fungsi terbina dalam untuk menghantar mesej ke aliran Twitter pengguna. Kod sampel yang disediakan dalam artikel ini adalah untuk tujuan pendidikan sahaja. Ia tidak mempunyai penggunaan praktikal dan pengendalian kesilapan, dan mana -mana perkembangan sebenar harus mengambil kesempatan daripada perpustakaan OAuth yang sedia ada, tetapi selepas membaca artikel ini, anda akan mempunyai pemahaman yang lebih baik tentang bagaimana OAuth berfungsi dan akan dapat menyelesaikan masalah yang lebih baik.

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>
Nilai

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn