วิธีใช้การตรวจสอบสิทธิ์ OAuth กับ REST API ผ่านคำสั่ง CURL


18

ฉันกำลังพยายามใช้ WordPress Rest Api พร้อมการพิสูจน์ตัวตนเพื่อรับข้อมูลเพิ่มเติมจาก API ฉันได้ติดตั้งปลั๊กอิน Oauth ปลั๊กอิน rest-api และรับข้อมูลรับรอง API จาก WP-CLI

ฉันหาวิธีเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต งานนี้:

// set our end point
$domain = "http://localhost/wp-api";
$endpoint = $domain."/wp-json/wp/v2/posts/";


$curl = curl_init($endpoint);

curl_setopt_array($curl, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_URL            => $endpoint,
]);
$response = curl_exec($curl);
$decoderesponse = json_decode($response, true);

?>

<pre>
  <?php print_r($decoderesponse); ?>
</pre>

แต่ฉันไม่สามารถหาวิธีตรวจสอบสิทธิ์ด้วยข้อมูลรับรองได้ นี่คือความพยายามของฉัน ฉันไม่แน่ใจว่า "กุญแจ" และ "ลับ" ถูกต้องหรือไม่

// Oauth credentials from wp-cli
$ID = "4";
$Key = "l8XZD9lX89kb";
$Secret = "UUbcc8vjUkGjuDyvK1gRTts9sZp2N8k9tbIQaGjZ6SNOyR4d";

// set our end point
$domain = "http://localhost/wp-api";
$endpoint = $domain."/wp-json/wp/v2/posts/1/revisions";

$headers[] = "key=$Key";
$headers[] = "secret=$Secret";

$curl = curl_init($endpoint);

curl_setopt_array($curl, [
  CURLOPT_HTTPHEADER     => $headers,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_URL            => $endpoint,
]);
$response = curl_exec($curl);
$decoderesponse = json_decode($response, true);

?>

<pre>
  <?php print_r($decoderesponse); ?>
</pre>

ผลลัพธ์คือ

Array
(
    [code] => rest_cannot_read
    [message] => Sorry, you cannot view revisions of this post.
    [data] => Array
        (
            [status] => 401
        )
)

ฉันจะทำให้เรื่องนี้ทำงานได้อย่างไร ขอขอบคุณ.


2
สิ่งต่างๆไม่ใช่เรื่องง่าย ฉันพยายามเขียนคำตอบแล้ว แต่ค่อนข้างนาน คุณสามารถเริ่มต้นจากการอ่านเอกสารโดยเฉพาะการอนุมัติการไหล โพสต์นี้มีบทช่วยสอนที่ดีเช่นกัน
cybmeta

คำตอบ:


10

ไปทีละขั้นตอนที่นี่ ดูเหมือนว่าคุณกำลังพยายามใช้ OAuth สำหรับการตรวจสอบสิทธิ์แต่ก่อนที่คุณจะสามารถทำได้คุณจะต้องได้รับ Access Tokenซึ่งจะใช้ในการตรวจสอบสิทธิ์เมื่อคุณทำการโทร API

เนื่องจากสิ่งนี้ใช้ OAuth รุ่น 1 เพื่อรับโทเค็นการเข้าถึงคุณต้องทำสิ่งต่อไปนี้:

  1. ขั้นแรกตั้งค่าแอปพลิเคชันโทรไปที่ไซต์เพื่อขอรับโทเค็นคำขอ (ข้อมูลรับรองชั่วคราว) โดยใช้รหัสลูกค้าและข้อมูลลับสำหรับแอปพลิเคชัน
  2. ขั้นที่สองทำการโทรไปยังไซต์เพื่อให้อนุญาตแอปพลิเคชันด้วยRequest Tokenจากขั้นตอนแรก (เข้าหาผู้ใช้ดูด้านล่าง)
  3. ประการที่สามหลังจากการอนุญาตเสร็จสมบูรณ์คุณจึงโทรไปที่ไซต์เพื่อรับโทเค็นการเข้าถึง (ตอนนี้แอปพลิเคชันนั้นได้รับอนุญาต)

ฉันแนะนำให้ใช้บุรุษไปรษณีย์สำหรับสองสามขั้นตอนแรกเพราะพวกเขาจะต้องเสร็จสิ้นเพียงครั้งเดียว บุรุษไปรษณีย์ก็จะจัดการกับการสร้างtimestamp, nonceและoauth signatureดังนั้นหากคุณไม่ได้ใช้ห้องสมุด OAuth แล้วคุณแน่นอนควรใช้บุรุษไปรษณีย์ เมื่อคุณมีโทเค็นการเข้าถึงของคุณคุณสามารถโทรผ่าน CURL โดยไม่ต้องมีห้องสมุดใด ๆ

https://www.getpostman.com/

ขั้นตอนแรก (แอปพลิเคชันตั้งค่า)

ติดตั้ง WP OAuth 1 ปลั๊กอินเปิดใช้งานแล้วไปที่เมนูรายการภายใต้ผู้ใช้> การประยุกต์ใช้งาน เพิ่มแอปพลิเคชันใหม่กรอกชื่อและคำอธิบาย สำหรับการเรียกกลับทั้ง URL เพื่อเปลี่ยนเส้นทางผู้ใช้ไปยัง (หลังจากการอนุญาต) หรือoopสำหรับการไหลออกนอกวงซึ่งจะเปลี่ยนเส้นทางไปยังหน้าภายในซึ่งแสดงโทเค็นของตัวตรวจสอบ (แทนการเปลี่ยนเส้นทาง)

https://github.com/WP-API/OAuth1/blob/master/docs/basics/Registering.md

ในการไปยังขั้นตอนที่สองคุณจำเป็นต้องโทรไปยังไซต์ของคุณโดยใช้ID ลูกค้าและความลับลูกค้าจากแอปพลิเคชันที่สร้างขึ้นเพื่อรับข้อมูลรับรองชั่วคราว (โทเค็นคำขอ)

เปิดบุรุษไปรษณีย์สร้างการโทรใหม่http://website.com/oauth1/requestคลิกที่แท็บการอนุญาตเลือก OAuth 1.0 จากดรอปดาวน์ใส่ในรหัสลูกค้า, ความลับลูกค้า, ตั้งค่าวิธีการลงนามHMAC-SHA1, เปิดใช้งานเพิ่ม params ไปที่ส่วนหัว, เข้ารหัสลายเซ็น oauthจากนั้นคลิกร้องขอคำขอ

คำขอบุรุษไปรษณีย์ OAuth1

บุรุษไปรษณีย์จะสร้างลายเซ็นไม่ใช่และเวลาให้คุณโดยอัตโนมัติและเพิ่มลงในส่วนหัว (คุณสามารถดูได้ภายใต้แท็บส่วนหัว)

คลิกส่งและคุณควรได้รับคำตอบที่ประกอบด้วยoauth_tokenและoauth_token_secret: บุรุษไปรษณีย์ OAuth1 คำขอตอบกลับ

ค่าเหล่านี้จะถูกใช้ในขั้นตอนถัดไปเพื่อให้สิทธิ์แอปพลิเคชันภายใต้บัญชีผู้ใช้ WordPress ของคุณ

ขั้นตอนที่สอง (อนุญาตแอปพลิเคชัน)

ขั้นตอนการอนุมัติจะต้องดำเนินการเพียงครั้งเดียวขั้นตอนนี้คือการเข้าถึงผู้ใช้และเป็นขั้นตอนที่ทุกคนคุ้นเคย ขั้นตอนนี้จำเป็นเนื่องจากคุณใช้ OAuth1 และแอปพลิเคชันจะต้องเชื่อมโยงกับบัญชีผู้ใช้ WordPress ลองคิดดูว่าเมื่อใดที่เว็บไซต์อนุญาตให้คุณเข้าสู่ระบบด้วย Facebook ... พวกเขาจะพาคุณไปยัง Facebook ที่คุณเข้าสู่ระบบและคลิก "อนุญาต" ... สิ่งนี้จะต้องทำผ่านเว็บไซต์ WordPress ของคุณ

ฉันขอแนะนำให้ใช้เว็บเบราว์เซอร์ของคุณในขั้นตอนนี้เนื่องจากคุณสามารถตั้งค่าตัวแปรใน URL ได้อย่างง่ายดายและสิ่งนี้จะให้หน้า "อนุญาต" เพื่ออนุญาตแอปพลิเคชัน

เปิดเว็บเบราว์เซอร์ของคุณและพิมพ์ URL ไปยังเว็บไซต์ของคุณเช่นนี้: http://website.com/oauth1/authorize

ตอนนี้เพิ่มไปยัง URL นี้oauth_consumer_key(รหัสลูกค้า) oauth_tokenและoauth_token_secret(จากขั้นตอนก่อนหน้า) ในตัวอย่างของฉันนี่คือ URL เต็ม:

http://website.com/oauth1/authorize?oauth_consumer_key=TUPFNj1ZTd8u&oauth_token=J98cN81p01aqSdFd9rjkHZWI&oauth_token_secret=RkrMhw8YzXQljyh99BrNHmP7phryUvZgVObpmJtos3QExG1O

OAuth1 อนุญาตแอปพลิเคชัน

เมื่อคุณคลิกที่อนุญาตคุณจะได้รับหน้าจออื่นพร้อมกับโทเค็นการตรวจสอบ ในตัวอย่างของฉันนี่คือโทเค็นการยืนยันที่ส่งคืนE0JnxjjYxc32fMr2AF0uWsZm

ขั้นตอนที่สาม (รับโทเค็นการเข้าถึง)

ตอนนี้เราได้อนุญาตแอปพลิเคชันแล้วเราต้องทำการโทรครั้งสุดท้ายเพื่อรับการอนุญาต Token ซึ่งจะใช้ในการโทร API ทั้งหมดของคุณ เช่นเดียวกับขั้นตอนแรกที่ฉันจะใช้บุรุษไปรษณีย์ (เพราะต้องมีลายเซ็นเป็น HMAC-SHA1) และทำให้ง่ายขึ้น 100 เท่าในการทำตามขั้นตอนเหล่านี้

เปิดบุรุษไปรษณีย์อีกครั้งและเปลี่ยน URL เป็น http://website.com/oauth1/access

ตรวจสอบให้แน่ใจว่าได้เพิ่มโทเค็นและโทเค็นลับ (ค่าจากขั้นตอนแรก) จากนั้นคลิกที่Paramsเพื่อแสดงกล่องด้านล่าง URL ในประเภทด้านซ้ายในoauth_verifierและทางด้านขวาให้ป้อนรหัสจากขั้นตอนที่สองโทเค็นการตรวจสอบ

ขั้นตอนการเข้าถึงบุรุษไปรษณีย์ OAuth1

ตรวจสอบให้แน่ใจว่าได้คลิกคำขออัปเดตจากนั้นคลิกส่งและคุณควรได้รับการตอบกลับด้วยoauth_tokenและoauth_token_secret... นี่คือสิ่งที่คุณต้องการสำหรับการโทร API ด้วย! ละทิ้งต้นฉบับดั้งเดิมจากขั้นตอนที่ 1 บันทึกสิ่งเหล่านี้ในรหัสของคุณหรือที่อื่นที่ปลอดภัย

บุรุษไปรษณีย์ OAuth1 เข้าถึงการตอบสนอง

จากนั้นคุณสามารถทำการเรียก API ไปยังเว็บไซต์ของคุณตั้งค่าส่วนหัวด้วยโทเค็นที่ส่งคืนและความลับของโทเค็น

คุณสามารถส่งหลายวิธีนี้ผ่านส่วนหัวการอนุญาตในพารามิเตอร์ GET หรือ POST (หากเข้ารหัสเป็นแอปพลิเคชัน / x-www-form-urlencoded) โปรดทราบว่าคุณต้องผ่านลายเซ็นเวลาและ nonce ฉันไม่ทราบว่าการตอบกลับนี้จะใช้เวลานานแค่ไหนดังนั้นฉันจะอัปเดตในวันพรุ่งนี้พร้อมตัวอย่างในการทำเช่นนั้นด้วยรหัสของคุณ

ฉันขอแนะนำอย่างยิ่งให้ติดตั้งบันทึก Rest API เพื่อให้คุณสามารถดูบันทึกการโทร API และดูสิ่งที่ถูกส่งกลับมา ฯลฯ ซึ่งจะช่วยในการแก้ไขข้อบกพร่องอย่างมากมาย

https://github.com/petenelson/wp-rest-api-log


ฉันรู้ว่ามีหลายบทเรียนพร้อมบุรุษไปรษณีย์หรือเครื่องมือที่คล้ายกัน แต่ฉันไม่พบบทเรียนใด ๆ ที่จะทำกระบวนการทั้งหมดด้วยฟังก์ชัน CURL ฉันหมายถึงรหัส PHP บริสุทธิ์ นั่นคือสิ่งที่ฉันต้องการ.
MinhTri

@ Dan9 TBH นั้นเป็นไปไม่ได้จริง ๆ ... อย่างน้อยไม่ใช่กับ OAuth1 ส่วนใหญ่เป็นเพราะคุณต้อง AUTHORIZE แอปพลิเคชันภายใต้บัญชีผู้ใช้ ขั้นตอนอื่น ๆ ทั้งหมดทำได้ง่ายด้วย CURL ปัญหาคือใช้ CURL เพื่อเข้าสู่ระบบในฐานะผู้ใช้ WordPress (ซึ่งหมายความว่าคุณต้องจัดเก็บข้อมูลประจำตัวในไฟล์ PHP ของคุณซึ่งไม่ใช่ความคิดที่ดี) และอนุญาตแอปพลิเคชันที่คุณ สามารถแก้ไขรหัสฐานข้อมูล OAuth1 ได้ แต่โดยสุจริตหากคุณต้องการใช้ CURL เพื่อทำทุกอย่าง ... คุณกำลังคิดเกี่ยวกับสิ่งนี้ในทางที่ผิดและควรหาทางแก้ไขหรือวิธีการอื่น
sMyles

@ Dan9 กับสิ่งที่คุณพยายามจะทำคุณควรใช้เซิร์ฟเวอร์ OAuth2 แทน OAuth1 ส่วนใหญ่เป็นเพราะข้อเท็จจริงที่ว่า OAuth2 มีคุณสมบัติใหม่รวมถึงประเภทการให้สิทธิ์การรับรองลูกค้าซึ่งหลีกเลี่ยงการทำตามขั้นตอนเหล่านี้ทั้งหมดbshaffer.github.io / oauth2-server-php-docs / grant-types / …
sMyles

@ Dan9 หากคุณได้รับความช่วยเหลือ 100% ในการทำสิ่งนี้ผ่าน OAuth1 โดยใช้ CURL ฉันคิดว่าเป็นไปได้ด้วยการแฮ็กรหัสสองสามครั้ง แต่ดังที่ฉันได้กล่าวไปแล้วนั่นหมายความว่าคุณต้องบันทึกชื่อผู้ใช้และรหัสผ่านของผู้ใช้ ไปยังไฟล์ PHP หากคุณพอใจกับสิ่งนั้นโปรดแจ้งให้เราทราบและเขียนบทช่วยสอนโดยใช้ CURL ไม่ต้องการใช้เวลาในการเขียนบทสอนหากคุณจะไปกับ OAuth2 หรือไม่ต้องการอีกต่อไป
sMyles

@ Dan9 ดี ... แค่นั้นแหละ ... ถ้าคุณจะใช้ OAuth1 คุณต้องเชื่อมโยงบัญชีผู้ใช้ WordPress โดยทั่วไปคิดว่าโทเค็นการเข้าใช้เช่นคีย์ API ... "รหัส API" จะต้องเชื่อมโยงกับบัญชีผู้ใช้ ... ตอนนี้ไม่ว่าคุณจะใช้บัญชีมาตรฐานที่คุณติดตั้งอยู่หรือไม่ก็ตาม แต่เมื่อคุณใช้ OAuth1 ต้องเชื่อมโยงกับบัญชีผู้ใช้ดังนั้นกระบวนการที่ยาวนานในการขอรับโทเค็นการเข้าถึง
sMyles

2

การเพิ่มสิ่งนี้เป็นคำตอบอื่นเพื่อให้ความช่วยเหลือแก่คุณในการหาวิธีการทำสิ่งนี้ ตามที่กล่าวไว้ในความคิดเห็นของฉันหากคุณจะใช้ OAuth1 คุณต้องเชื่อมโยงกับบัญชีผู้ใช้

ก่อนอื่นคุณต้องใช้ CURL เพื่อเข้าสู่เว็บไซต์ด้วยรหัสผ่านชื่อผู้ใช้สำหรับ WordPress เก็บคุกกี้เพื่อใช้ในการโทร CURL ไปยัง OAuth (ตรวจสอบให้แน่ใจว่าได้อัปเดตการโทร CURL เพื่อรวมคุกกี้):

/programming/724107/wordpress-autologin-using-curl-or-fsockopen-in-php

จากนั้นโทรไปยัง OAuth โดยใช้ CURL ด้วยรหัสลูกค้าและความลับของลูกค้าเพื่อรับโทเค็น oauth และความลับชั่วคราว (โทเค็นคำขอ)

ในการโทรออก (และการโทรเพื่อรับโทเค็นการเข้าถึง) คุณต้องตั้งค่าการโทร CURL ของคุณให้ถูกต้อง ดูจุดสิ้นสุดของคำตอบนี้สำหรับรหัสและข้อมูลอ้างอิง

หลังจากที่คุณได้รับโทเค็น oauth และความลับชั่วคราว (ขอโทเค็น) ให้ทำการเรียก CURL POST ไปยัง URL ของเว็บไซต์ของคุณ:

http://website.com/oauth1/authorize

จากนั้นคุณจะต้องดึงค่าทั้งหมดจาก HTML ที่ส่งคืนสำหรับหน้าการให้สิทธิ์จากนั้นส่ง POST ของคุณเองไปที่ URL การกระทำของฟอร์ม

/programming/35363815/how-to-get-a-value-input-from-html-returned-of-curl

โดยเฉพาะอย่างยิ่งจำเป็นต้องรวมอยู่ในข้อมูล POST ของคุณเพื่อให้ "การอนุมัติ" POSTing เสร็จสมบูรณ์ http://domain.com/wp-login.php?action=oauth1_authorize

  • _wpnonce - นี่คือค่า nonce สำหรับแบบฟอร์มที่จะส่งต้องดึงจาก HTML input และส่งด้วย POST ของคุณ

    consumer - นี่เป็นอินพุตที่ซ่อนอยู่ใน HTML (นี่คือการอ้างอิงถึงโพสต์ ID ดังนั้นคุณต้องดึงมันจากอินพุต HTML

    oauth_token - นี่เป็นอินพุตที่ซ่อนอยู่ใน HTML (แต่คุณควรมีสิ่งนี้อยู่แล้ว)

    wp-submit - สิ่งนี้จะต้องมีการตั้งค่า authorize

นี่คือตัวอย่าง HTML ที่สร้างขึ้นสำหรับหน้าการรับรองความถูกต้อง:

<form name="oauth1_authorize_form" id="oauth1_authorize_form" action="http://website.com/wp-login.php?action=oauth1_authorize" method="post">

    <h2 class="login-title">Connect My Auth</h2>

    <div class="login-info">
        <p>Howdy <strong>admin</strong>,<br/> "My OAuth Demo" would like to connect to Example Site.</p>

    </div>

    <input type="hidden" name="consumer" value="5428" /><input type="hidden" name="oauth_token" value="i1scugFXyPENniCP4kABKtGb" /><input type="hidden" id="_wpnonce" name="_wpnonce" value="ca9b267b4f" /><input type="hidden" name="_wp_http_referer" value="/wp-login.php?action=oauth1_authorize&amp;oauth_consumer_key=TUPFNj1ZTd8u&amp;oauth_token=i1scugFXyPENniCP4kABKtGb&amp;oauth_token_secret=gzqW47pHG0tilFm9WT7lUgLoqN2YqS6tFFjUEiQoMgcmG2ic" />   <p class="submit">
        <button type="submit" name="wp-submit" value="authorize" class="button button-primary button-large">Authorize</button>
        <button type="submit" name="wp-submit" value="cancel" class="button button-large">Cancel</button>
    </p>

</form>

หลังจากที่คุณสร้าง POST ด้วยค่า / ข้อมูลเหล่านี้แล้วนี่คือ HTML ที่จะถูกส่งคืนพร้อมรหัสการอนุญาต (ดังนั้นคุณต้องดึงค่าจากด้านใน<code>บล็อก:

<div id="login">
    <h1><a href="https://wordpress.org/" title="Powered by WordPress" tabindex="-1">Example Site</a></h1>
    <p>Your verification token is <code>yGOYFpyawe8iZmmcizqVIw3f</code></p> <p id="backtoblog"><a href="http://website.com/">&larr; Back to Example Site</a></p>
</div>

เมื่อคุณมีโทเค็นการตรวจสอบแล้วคุณสามารถโทรออก/oauth1/accessโดยใช้โทเค็นการตรวจสอบโทเค็น oauth และความลับโทเค็น oauth โทเค็นการตรวจสอบจะต้องใส่ในข้อมูล POST เป็นoauth_verifier

นั่นจะส่งคืนโทเค็นการเข้าถึงใหม่และถาวรของคุณและ VOILA!

ตัวอย่างรหัส CURL

ด้านล่างนี้คือตัวอย่างโค้ดสำหรับการโทร CURL ส่วนที่สำคัญที่สุดคือวิธีการoauth_signatureสร้าง:

https://oauth1.wp-api.org/docs/basics/Signing.html

function buildBaseString($baseURI, $method, $params){
    $r = array();
    ksort($params);
    foreach($params as $key=>$value){
        $r[] = "$key=" . rawurlencode($value);
    }

    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}

function buildAuthorizationHeader($oauth){
    $r = 'Authorization: OAuth ';
    $values = array();
    foreach($oauth as $key=>$value)
        $values[] = "$key=\"" . rawurlencode($value) . "\"";

    $r .= implode(', ', $values);
    return $r;
}

// Add request, authorize, etc to end of URL based on what call you're making
$url = "http://domain.com/oauth/";

$consumer_key = "CLIENT ID HERE";
$consumer_secret = "CLIENT SECRET HERE";

$oauth = array( 'oauth_consumer_key' => $consumer_key,
                'oauth_nonce' => time(),
                'oauth_signature_method' => 'HMAC-SHA1',
                'oauth_callback' => 'oob',
                'oauth_timestamp' => time(),
                'oauth_version' => '1.0');

$base_info = buildBaseString($url, 'GET', $oauth);
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;


$header = array(buildAuthorizationHeader($oauth), 'Expect:');
$options = array( CURLOPT_HTTPHEADER => $header,
                  CURLOPT_HEADER => false,
                  CURLOPT_URL => $url,
                  CURLOPT_RETURNTRANSFER => true,
                  CURLOPT_SSL_VERIFYPEER => false);

$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);

$return_data = json_decode($json);

print_r($return_data);

ไซต์นี้บอกวิธีเข้ารหัสรหัสลายเซ็น OAuth และวิธีส่งโดยใช้ CURL (ฉันขอแนะนำให้อ่านทั้งหน้า): https://hannah.wf/twitter-oauth-simple-curl-requests-for-your-own- ข้อมูล/

ทรัพยากรเพิ่มเติมเกี่ยวกับการสร้างลายเซ็น OAuth1: /programming/24613277/oauth-signature-generation-using-hmac-sha1

แหล่งข้อมูลอื่น ๆ : http://collaboradev.com/2011/04/01/twitter-oauth-php-tutorial/


ฉันจะรับรหัสลูกค้าและข้อมูลลับของลูกค้าและเชื่อมโยงกับผู้ใช้ที่ถูกต้องได้อย่างไร ปัจจุบันผู้ดูแลระบบเท่านั้นที่สามารถสร้างแอปใหม่และมันเกิดขึ้นผ่านแผงควบคุมของผู้ดูแลระบบเท่านั้น Btw ฉันได้พยายามที่จะสร้างoauth_signatureตามที่คุณบอก json_oauth1_signature_mismatchแต่อย่างใดการตอบสนองอยู่เสมอ
MinhTri

@ Dan9 ใช่แล้วถูกต้องผู้ดูแลระบบต้องสร้างแอพมิฉะนั้นจะเป็นปัญหาด้านความปลอดภัยขนาดใหญ่ที่อนุญาตให้ผู้ใช้ที่ไม่ระบุชื่อสร้างแอพได้ นี่คือบางเว็บไซต์เกี่ยวกับลายเซ็นwordpress.stackexchange.com/questions/185511/… github.com/WP-API/OAuth1/issues/34 github.com/WP-API/OAuth1/issues/27
sMyles

0

อัปเดต: จากสิ่งที่ฉันอ่านแล้วคุณต้องทำหลายม้วนเพื่อเข้าถึง access_token ซึ่งคุณจะใช้ในการทำแบบสอบถาม

  • การได้รับหนังสือรับรองชั่วคราว: ลูกค้าได้รับชุดหนังสือรับรองชั่วคราวจากเซิร์ฟเวอร์
  • การอนุญาต: ผู้ใช้ "อนุญาต" โทเค็นคำขอเพื่อเข้าถึงบัญชีของพวกเขา
  • Token Exchange: ลูกค้าแลกเปลี่ยนข้อมูลรับรองชั่วคราวระยะสั้นสำหรับโทเค็นอายุยืน

การไหลของเซิร์ฟเวอร์ oauth1


0

ฉันรู้ว่าฉันมาช้าไปหน่อย แต่คุณสามารถใช้ wp_remote_get และ _post ได้หรือไม่

ฉันกำลังดึงและโพสต์เนื้อหาด้วยการติดตั้ง wordpress โดยใช้:

นี่เป็นแนวคิดทั่วไปจาก wordpress codex:

$response = wp_remote_post( $url, array(
    'body'    => $data,
    'httpversion' => '1.0',
    'sslverify' => false,
    'headers' => array(
        'Authorization' => 'Basic ' . base64_encode( $username . ':' . $password ),
    ),
) );

นี่คือตัวอย่างที่เฉพาะเจาะจงมากขึ้น:

$url='http://WWW.EXAMPLE HERE.';
$response = wp_remote_post( $url, array(
    'method' => 'POST',
    'timeout' => 45,
    'redirection' => 5,
    'httpversion' => '1.0', //needed to get a response
    'blocking' => true,
    'headers' => array('Authorization' => 'Basic ' . base64_encode( 'MY TOKENID' . ':' . '' )),
    'body' => $body // in array
    'cookies' => array()
    )
);

if ( is_wp_error( $response ) ) {
   $error_message = $response->get_error_message();
   echo "Something went wrong: $error_message";
} else {
 //  echo 'Response:<pre>';
 //  print_r( $response );
 //    echo '</pre>'; 
$responseBody = json_decode($response['body'],true);
echo $responseBody['message'];

    }
    }
}

เคล็ดลับกำลังเข้ารหัสชื่อผู้ใช้และ pw ตอนนี้เวลาขึ้นอยู่กับชื่อผู้ใช้ API และ pw จะว่างเปล่าหรือจะเป็นโทเค็นของคุณ

ดังนั้นตัวอย่างในตัวอย่างเฉพาะของฉันด้านบนส่วนหัวนั้น

'headers' => array('Authorization' => 'Basic ' . base64_encode( 'MYTOKENID' . ':' . '' ))

และฉันเว้นว่างไว้ ขึ้นอยู่กับระบบ API ที่คุณใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.