সিআরএল কমান্ডের মাধ্যমে REST এপিআই দিয়ে ওআউথ প্রমাণীকরণ কীভাবে ব্যবহার করবেন?


18

আমি এপিআই থেকে আরও ডেটা পেতে প্রমাণীকরণ সহ ওয়ার্ডপ্রেস রেস্ট এপি ব্যবহার করার চেষ্টা করছি। আমি ওআউথ প্লাগইন ইনস্টল করেছি, রেস্ট-এপিআই প্লাগইন এবং ডাব্লুপি-সিএলআই থেকে প্রাপ্ত API শংসাপত্রগুলি।

অনুমোদন ছাড়াই কীভাবে ডেটা অ্যাক্সেস করবেন তা আমি নির্ধারণ করেছি। এইটা কাজ করে:

// 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
জিনিস এত সহজ নয়। আমি একটি উত্তর লেখার চেষ্টা করেছি তবে এটি বেশ দীর্ঘ। আপনি দস্তাবেজগুলি পড়ার মাধ্যমে শুরু করতে পারেন, বিশেষত অনুমোদন প্রবাহ । এই পোস্টে একটি দুর্দান্ত টিউটোরিয়াল আছে
সাইবমেটা

উত্তর:


10

আসুন এখানে ধাপে ধাপে। দেখে মনে হচ্ছে আপনি কেবল প্রমাণীকরণের জন্য OAuth ব্যবহার করার চেষ্টা করছেন তবে এটি করার আগে আপনার অ্যাক্সেস টোকেন পাওয়া দরকার যা আপনি আপনার এপিআই কল করার সময় প্রমাণীকরণের জন্য ব্যবহৃত হবে।

যেহেতু এটি OAuth সংস্করণ 1 ব্যবহার করছে, অ্যাক্সেস টোকেন পাওয়ার জন্য আপনাকে অবশ্যই নিম্নলিখিতগুলি করতে হবে:

  1. প্রথমে একটি অ্যাপ্লিকেশন সেটআপ করুন, অ্যাপ্লিকেশনটির জন্য ক্লায়েন্ট আইডি এবং গোপনীয়তা ব্যবহার করে অনুরোধ টোকেন (অস্থায়ী শংসাপত্রগুলি) পাওয়ার জন্য সাইটে কল করুন
  2. দ্বিতীয়ত, প্রথম পদক্ষেপ থেকে অনুরোধ টোকেন ( অ্যাপ্লিকেশন -মুখোমুখি, নীচে দেখুন) এর মাধ্যমে আবেদনটি অনুমোদনের জন্য সাইটে কল করুন to
  3. তৃতীয়ত, অনুমোদনের কাজ শেষ হওয়ার পরে আপনি অ্যাক্সেস টোকেনটি পাওয়ার জন্য সাইটে একটি কল করবেন (এখন সেই আবেদন অনুমোদিত হয়েছে)

আমি পোস্টম্যানটি প্রথম কয়েকটি পদক্ষেপের জন্য ব্যবহারের পরামর্শ দিচ্ছি, কারণ সেগুলি কেবল একবারই সম্পন্ন করা দরকার। পিয়ন এছাড়াও উৎপাদিত হ্যান্ডেল করা হবে timestamp, nonceএবং oauth signature, তাই আপনি যদি একটি OAuth গ্রন্থাগার ব্যবহার করছেন না, তাহলে আপনি একেবারে পিয়ন ব্যবহার করা উচিত। একবার আপনার অ্যাক্সেস টোকেন হয়ে গেলে আপনি কোনও লাইব্রেরি ছাড়াই সিআরএল এর মাধ্যমে কল করতে পারবেন।

https://www.getpostman.com/

প্রথম পদক্ষেপ (সেটআপ অ্যাপ্লিকেশন)

ডাব্লুপি ওআউথ 1 প্লাগইন ইনস্টল করুন, সক্রিয় করুন, তারপরে ব্যবহারকারীদের> অ্যাপ্লিকেশনগুলির আওতায় যান মেনু আইটেম । নতুন অ্যাপ্লিকেশন যুক্ত করুন, নাম এবং বিবরণ পূরণ করুন। কলব্যাকের জন্য ব্যবহারকারীকে (অনুমোদনের পরে) পুনঃনির্দেশ করার জন্য URL, বা oopআউট অফ অফ ব্যান্ডের জন্য যা কোনও অভ্যন্তরীণ পৃষ্ঠায় পুনর্নির্দেশ করবে যা যাচাইকারী টোকেন (পুনর্নির্দেশের পরিবর্তে) প্রদর্শন করে।

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

দ্বিতীয় ধাপে এগিয়ে যাওয়ার জন্য তৈরি করা অ্যাপ্লিকেশন থেকে ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট ব্যবহার করে অস্থায়ী শংসাপত্রগুলি (অনুরোধ টোকেন) পেতে আপনার সাইটে কল করা দরকার ।

পোস্টম্যান খুলুন, এতে একটি নতুন কল তৈরি http://website.com/oauth1/requestকরুন, অনুমোদনের ট্যাবে ক্লিক করুন, ড্রপডাউন থেকে OAuth 1.0 নির্বাচন করুন, ক্লায়েন্ট কী, ক্লায়েন্ট সিক্রেটে প্রবেশ করুন, স্বাক্ষর পদ্ধতি সেট HMAC-SHA1করুন, শিরোনামে প্যারাম যুক্ত করুন , এনকোড ওউথ স্বাক্ষর করুন , তারপরে আপডেট অনুরোধ ক্লিক করুন

পোস্টম্যান ওআউথ 1 অনুরোধ

পোস্টম্যান আপনার জন্য স্বাক্ষর, ননস, এবং টাইমস্ট্যাম্প স্বয়ংক্রিয়ভাবে উত্পন্ন করবে এবং তাদের শিরোনামে যুক্ত করবে (আপনি শিরোনাম ট্যাবের অধীনে দেখতে পারেন)।

প্রেরণ ক্লিক করুন এবং আপনার একটি প্রতিক্রিয়া পাওয়া উচিত যার মধ্যে রয়েছে oauth_tokenএবং oauth_token_secret: পোস্টম্যান ওআউথ 1 অনুরোধের প্রতিক্রিয়া

এই মানগুলি আপনার ওয়ার্ডপ্রেস ব্যবহারকারী অ্যাকাউন্টের অধীনে অ্যাপ্লিকেশনটিকে অনুমোদিত করতে পরবর্তী পদক্ষেপে ব্যবহৃত হবে।

দ্বিতীয় পদক্ষেপ (আবেদন অনুমোদিত)

অনুমোদনের পদক্ষেপটি কেবল একবারই সম্পন্ন করা দরকার, এই পদক্ষেপটি ব্যবহারকারী-মুখী এবং যার সাথে প্রত্যেকে পরিচিত। এই পদক্ষেপটি প্রয়োজনীয় কারণ আপনি OAuth1 ব্যবহার করছেন এবং অ্যাপ্লিকেশনটি কোনও ওয়ার্ডপ্রেস ব্যবহারকারীর অ্যাকাউন্টের সাথে সম্পর্কিত হতে হবে। চিন্তা করুন যখন কোনও সাইট আপনাকে ফেসবুকের সাথে লগইন করতে দেয় ... তারা আপনাকে ফেসবুকের দিকে পরিচালিত করে যেখানে আপনি লগইন করেন এবং "অনুমোদন করুন" ক্লিক করেন ... এটি করা ঠিক আপনার ওয়ার্ডপ্রেস সাইটের মাধ্যমেই করা দরকার।

আমি এই পদক্ষেপের জন্য আপনার ওয়েব ব্রাউজারটি ব্যবহার করার পরামর্শ দিচ্ছি, কারণ আপনি সহজেই ইউআরএলটিতে ভেরিয়েবলগুলি সেট করতে পারেন এবং এটি অ্যাপ্লিকেশনটিকে অনুমোদিত করার জন্য "অনুমোদিত" পৃষ্ঠা সরবরাহ করে।

আপনার ওয়েব ব্রাউজারটি খুলুন এবং আপনার সাইটে URL টি টাইপ করুন: http://website.com/oauth1/authorize

এখন এই ইউআরএল, oauth_consumer_key(ক্লায়েন্ট আইডি) oauth_tokenএবং oauth_token_secret(পূর্ববর্তী পদক্ষেপ থেকে) যুক্ত করুন। আমার উদাহরণে এটি সম্পূর্ণ ইউআরএল:

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

OAuth1 অনুমোদন অ্যাপ্লিকেশন

একবার আপনি অনুমোদন ক্লিক করুন, আপনি যাচাই টোকেন সঙ্গে অন্য পর্দা পাবেন। আমার উদাহরণে এটি যাচাইয়ের টোকেন ফিরিয়ে দিয়েছেE0JnxjjYxc32fMr2AF0uWsZm

তৃতীয় পদক্ষেপ (অ্যাক্সেস টোকেন পান)

এখন যেহেতু আমরা অ্যাপ্লিকেশনটি অনুমোদিত করেছি, অনুমোদন টোকেন পেতে আমাদের একটি শেষ কল করা দরকার যা আপনার সমস্ত এপিআই কল করার জন্য ব্যবহৃত হবে। ঠিক প্রথম পদক্ষেপের মতোই আমি পোস্টম্যান ব্যবহার করতে যাচ্ছি (কারণ স্বাক্ষরটি HMAC-SHA1 হওয়া আবশ্যক) এবং এটি এই পদক্ষেপগুলি সম্পন্ন করা 100x আরও সহজ করে তোলে।

আবার পোস্টম্যান খুলুন এবং এতে ইউআরএল পরিবর্তন করুন http://website.com/oauth1/access

টোকেন এবং টোকেন সিক্রেট (প্রথম ধাপের মান) যোগ করার বিষয়টি নিশ্চিত করুন, তারপরে ইউআরএলের নীচের বাক্সগুলি দেখানোর জন্য প্যারামগুলিতে ক্লিক করুন । Oauth_verifier এবং ডানদিকে বাম প্রকারে , দ্বিতীয় ধাপ থেকে কোডটি প্রবেশ করান, যাচাইকরণ টোকেন

পোস্টম্যান ওআউথ 1 অ্যাক্সেস পদক্ষেপ

আপডেট অনুরোধটি ক্লিক করার বিষয়ে নিশ্চিত হন, তারপরে প্রেরণে ক্লিক করুন, এবং আপনার সাথে একটি প্রতিক্রিয়া পাওয়া উচিত oauth_tokenএবং oauth_token_secret... আপনার এপিআই কলগুলি আপনার এটাই করা দরকার! প্রথম পদক্ষেপটি 1 থেকে বাদ দিন, এগুলি আপনার কোডে বা অন্য কোথাও নিরাপদে সংরক্ষণ করুন।

পোস্টম্যান ওআউথ 1 অ্যাক্সেস প্রতিক্রিয়া

তারপরে আপনি আপনার সাইটে একটি API কল করতে পারেন, ফেরত টোকেন দিয়ে শিরোনামগুলি সেট করে এবং টোকেন সিক্রেট করতে পারেন।

আপনি এই একাধিক উপায়ে, অনুমোদনের শিরোনামের মাধ্যমে, জিইটি প্যারামিটারগুলিতে বা পোস্টে (যদি অ্যাপ্লিকেশন / এক্স-www-ফর্ম-urlencoded হিসাবে এনকোড থাকে) পাস করতে পারেন। মনে রাখবেন আপনাকে স্বাক্ষর, টাইমস্ট্যাম্প এবং ননস পাস করতে হবে। আমি বুঝতে পারি না যে এই উত্তরটি আমাকে কতটা সময় নেবে, তাই আমি আগামীকাল আপনার কোড সহ এটি করার উদাহরণ দিয়ে আপডেট করব।

আমি রেস্ট এআইপি লগ ইনস্টল করার দৃ recommend়ভাবে পরামর্শ দিচ্ছি যাতে আপনি এপিআই কলগুলির লগ দেখতে পারেন এবং কী কী পাঠানো হয়েছে, ফিরে এসেছিল তা দেখুন। এটি ডিবাগিংয়ে মারাত্মকভাবে সহায়তা করবে।

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


আমি জানি, পোস্টম্যান বা অনুরূপ সরঞ্জামগুলির সাথে অনেকগুলি টিউটোরিয়াল রয়েছে তবে আমি সিআরএল কার্যকারিতা সহ পুরো প্রক্রিয়াটি করতে কোনও টিউটোরিয়াল খুঁজে পাচ্ছি না, মানে খাঁটি পিএইচপি কোড। এটাই সেটা যা আমি চাই.
MinhTri

@ ডান 9 টিবিএইচ এটি সত্যিই সম্ভব নয় ... কমপক্ষে OAuth1 এর সাথে নয়, মূলত কারণ আপনাকে কোনও ব্যবহারকারীর অ্যাকাউন্টের অধীনে অ্যাপ্লিকেশনটি অনুমোদন করতে হবে। অন্যান্য সমস্ত পদক্ষেপগুলি সিআরএল-এর সাথে করা সহজ, সমস্যাটি ইউআরএল ওয়ার্ডপ্রেস ব্যবহারকারী হিসাবে লগইন করার জন্য সিআরএল ব্যবহার করছে (যার অর্থ আপনার পিএইচপি ফাইলে শংসাপত্রগুলি সংরক্ষণ করা দরকার যা ভাল ধারণা নয়), এবং অ্যাপ্লিকেশনটিকে অনুমোদন দেওয়ার জন্য যা আপনি OAuth1 কোডবেসটি সংশোধন করতে পারে, তবে সততার সাথে যদি আপনি কিছু করতে সিআরএল ব্যবহার করতে চান ... আপনি এইটি ভুল উপায়ে নিয়ে ভাবছেন এবং অন্য সমাধান বা পদ্ধতি নিয়ে আসা উচিত।
sMyles 15

@ ড্যান 9 আপনি যা করার চেষ্টা করছেন তা দিয়ে আপনার OAuth1 এর পরিবর্তে OAuth2 সার্ভারটি ব্যবহার করা উচিত, মূলত কারণ OAuth2 এর ক্লায়েন্ট শংসাপত্র অনুদানের ধরণ সহ নতুন বৈশিষ্ট্য রয়েছে যা এই সমস্ত পদক্ষেপের মধ্য দিয়ে যেতে এড়িয়ে যায় bshaffer.github.io / oauth2-server-php-docs /
अनुदानের

@ ড্যান 9 যদি আপনি ওআউথ 1 এর মাধ্যমে সিআরএল ব্যবহার করে 100% সহায়তা পেতে প্রস্তুত হন তবে আমি মনে করি যে কয়েকটি কোড হ্যাকের সাহায্যে এটি সম্ভব, তবে আমি যেমন উল্লেখ করেছি, এর অর্থ আপনাকে ব্যবহারকারীর USERNAME এবং পাসওয়ার্ড সংরক্ষণ করতে হবে পিএইচপি ফাইল। যদি আপনি এটির সাথে ভাল থাকেন তবে সিআরএল ব্যবহার করে এটি সম্পর্কে একটি টিউটোরিয়াল লিখুন এবং অসুস্থ হয়ে পড়ুন, আপনি যদি OAuth2 এর সাথে যাচ্ছেন বা এর দরকার নেই তবে টিউটোরিয়াল লেখার সময়টি ব্যয় করতে চান না
sMyles

@ ডান 9 ভাল ... এটি ঠিক ... আপনি যদি OAuth1 ব্যবহার করতে চান তবে আপনাকে একটি ওয়ার্ডপ্রেস ব্যবহারকারী অ্যাকাউন্ট যুক্ত করতে হবে। মূলত একটি এপিআই কী এর মতো অ্যাক্সেস টোকেনের কথা ভাবুন ... "এপিআই কী" কোনও ব্যবহারকারীর অ্যাকাউন্টের সাথে যুক্ত থাকতে হবে ... এখন আপনি সেটআপ করা কিছু মানক অ্যাকাউন্ট ব্যবহার করেন কিনা তা আপনার উপর নির্ভর করে .. তবে এটি OAuth1 ব্যবহার করার সময় নির্বিশেষে ব্যবহারকারীর অ্যাকাউন্টের সাথে যুক্ত থাকতে হবে, তাই অ্যাক্সেস টোকেনটি অর্জনের দীর্ঘ প্রক্রিয়া।
sMyles 15

2

কীভাবে এটি করবেন তা নির্ধারণ করতে আপনাকে সহায়তা দেওয়ার জন্য এটি অন্য উত্তর হিসাবে যুক্ত করা। মূলত আমার মন্তব্যে উল্লিখিত হিসাবে যদি আপনি OAuth1 ব্যবহার করতে চলেছেন তবে আপনাকে এটি কোনও ব্যবহারকারীর অ্যাকাউন্টের সাথে যুক্ত করা উচিত, এর আশপাশে কোনও উপায় নেই।

প্রথমে আপনাকে ওয়ার্ডপ্রেসের জন্য একটি ব্যবহারকারীর পাসওয়ার্ড দিয়ে সাইটে লগইন করতে কুকি ব্যবহার করতে হবে, কুকি সংরক্ষণ করুন যাতে আপনি এটি আপনার সিআরএল কলটিতে OAuth এ ব্যবহার করতে পারেন (কুকি অন্তর্ভুক্ত করার জন্য আপনার সিআরএল কলটি আপডেট করার বিষয়টি নিশ্চিত করুন):

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

তারপরে অস্থায়ী ওউথ টোকেন এবং গোপনীয়তা অর্জনের জন্য ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট সহ সিআরএল ব্যবহার করে ওআউথকে কল করুন (অনুরোধ টোকেন)

এই কলটি করতে (এবং অ্যাক্সেস টোকেন পাওয়ার জন্য কলটি করতে) আপনাকে আপনার সিআরএল কলটি সঠিকভাবে সেটআপ করতে হবে। কোড এবং রেফারেন্সগুলির জন্য এই উত্তরটির শেষ দেখুন।

আপনি অস্থায়ী oauth টোকেন এবং গোপন (অনুরোধ টোকেন) প্রাপ্ত করার পরে, আপনার সাইটের এই ইউআরএলে একটি সিআরএল পোস্ট পোস্ট করুন:

http://website.com/oauth1/authorize

তারপরে আপনাকে অনুমোদনের পৃষ্ঠার জন্য প্রত্যাবর্তিত এইচটিএমএল থেকে সমস্ত মান টানতে হবে এবং তারপরে ফর্ম ক্রিয়াকলাপের URL এ নিজের পোস্টটি জমা দিতে হবে।

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

বিশেষত এগুলিকে "অনুমোদন" পোষ্টিং সম্পূর্ণ করার জন্য আপনার পোস্টের ডেটাতে অন্তর্ভুক্ত করা দরকার http://domain.com/wp-login.php?action=oauth1_authorize

  • _wpnonce - ফর্মটি জমা দেওয়ার জন্য এটি ননস মান, এটি এইচটিএমএল ইনপুট থেকে টানা উচিত এবং আপনার পোস্টের সাথে জমা দেওয়া উচিত

    consumer - এটি এইচটিএমএলের একটি লুকানো ইনপুট (এটি কোনও পোস্ট আইডির রেফারেন্স তাই আপনাকে HTML ইনপুট থেকে টানতে হবে

    oauth_token - এটি HTML এর একটি গোপন ইনপুট (তবে আপনার এটি ইতিমধ্যে থাকাও উচিত)

    wp-submit - এটির মান নির্ধারণ করা দরকার authorize

প্রমাণীকরণ পৃষ্ঠার জন্য উত্পন্ন এইচটিএমএলের উদাহরণ এখানে:

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

আপনি এই সমস্ত মান / ডেটা দিয়ে পোষ্ট করার পরে, এটি এইচটিএমএল যা অনুমোদনের কোডটি দিয়ে ফিরে আসবে (যাতে আপনার <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_verifier

এটি আপনার নতুন এবং স্থায়ী অ্যাক্সেস টোকেন এবং ভায়লা ফিরিয়ে দেবে!

সিআরএল কোডের উদাহরণ

নীচে সিআরএল কল করার জন্য কোড কোড দেওয়া হল, কীভাবে 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 স্বাক্ষরটিকে এনকোড করতে হবে এবং কীভাবে সিআরএল ব্যবহার করে প্রেরণ করবেন (আমি পুরো পৃষ্ঠাটি পড়ার পরামর্শ দিই): https://hannah.wf/twitter-oauth-simple-curl-requests-for-Your-own- ডেটা /

OAuth1 স্বাক্ষর উত্পন্ন করার জন্য আরও সংস্থান: /programming/

অন্যান্য সংস্থানসমূহ: http://collaboradev.com/2011/04/01/twitter-oauth-php-tutorial/


আমি কীভাবে ক্লায়েন্ট আইডি এবং ক্লায়েন্টের গোপনীয়তা পেতে এবং এটি কোনও বৈধ ব্যবহারকারীর সাথে সংযুক্ত করতে পারি? বর্তমানে কেবল অ্যাডমিনরা একটি নতুন অ্যাপ তৈরি করতে পারে এবং এটি কেবল অ্যাডমিন ড্যাশবোর্ডের মাধ্যমেই ঘটে। বিটিডব্লিউ, oauth_signatureআপনি যেমন বলেছিলেন তেমনভাবে উত্পন্ন করার চেষ্টা করেছি তবে, কোনওভাবে, প্রতিক্রিয়া সর্বদা json_oauth1_signature_mismatch
MinhTri

@ ডান 9 হ্যাঁ এটি সঠিক, অ্যাডমিনদের অ্যাপ্লিকেশন তৈরি করতে হবে, অন্যথায় এটি অনামী ব্যবহারকারীদের দ্বারা অ্যাপ্লিকেশন তৈরি করার অনুমতি দেওয়ার জন্য একটি বিশাল সুরক্ষা সমস্যা হবে would এখানে কিছু স্বাক্ষর সংক্রান্ত সাইট এর wordpress.stackexchange.com/questions/185511/... github.com/WP-API/OAuth1/issues/34 github.com/WP-API/OAuth1/issues/27
sMyles

0

আপডেট: আমি যা পড়েছি তা থেকে, অ্যাক্সেস_ টোকেন পেতে আপনাকে একাধিক কার্লগুলি করতে হবে যা আপনি তারপরে কোয়েরিটি করতে ব্যবহার করেন

  • অস্থায়ী শংসাপত্রাদি অর্জন: ক্লায়েন্ট সার্ভার থেকে অস্থায়ী শংসাপত্রগুলির একটি সেট পান gets
  • অনুমোদন: ব্যবহারকারী তাদের অ্যাকাউন্ট অ্যাক্সেস করার জন্য অনুরোধ টোকেনকে "অনুমোদিত" করে।
  • টোকেন এক্সচেঞ্জ: ক্লায়েন্ট দীর্ঘকালীন টোকেনের জন্য স্বল্প-স্থায়ী অস্থায়ী শংসাপত্রাদি বিনিময় করে।

oauth1 সার্ভার প্রবাহ


0

আমি জানি আমি এই মুহূর্তে কিছুটা দেরিতে আসছি তবে আপনি কি wp_remote_get এবং _ পোস্ট ব্যবহার করতে পারেন?

আমি তাদের ব্যবহার করে আমার ওয়ার্ডপ্রেস ইনস্টল করে সামগ্রী টানছি এবং পোস্ট করছি:

এটি ওয়ার্ডপ্রেস কোডেক্স থেকে সাধারণ ধারণা:

$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 এনকোড করছে। এখন প্রায়শই সময় এপিআই এর ব্যবহারকারীর নাম এবং পিডব্লিউর উপর নির্ভর করে হয় ফাঁকা হবে বা আপনার টোকেন হবে।

সুতরাং উপরে আমার নির্দিষ্ট উদাহরণে উদাহরণস্বরূপ, শিরোনামগুলি ছিল

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

এবং আমি পিডব্লিউ ফাঁকা ছেড়ে। এটি আপনি যে API সিস্টেমটি ব্যবহার করছেন তা সম্পূর্ণ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.