আমি আপনার সাথে একমত. .NET অ্যাপ্লিকেশনগুলির জন্য উপলব্ধ ওপেন-সোর্স OAuth সমর্থন ক্লাসগুলি বোঝা শক্ত, অতিরিক্ত জটিল (ডটনেটঅপেনথ দ্বারা কতগুলি পদ্ধতি উদ্ঘাটিত হয়?), খারাপভাবে ডিজাইন করা হয়েছে (সেই গুগল থেকে OAuthBase.cs মডিউলটিতে 10 স্ট্রিং প্যারামিটার সহ পদ্ধতিগুলি দেখুন) আপনি সরবরাহ করেছেন এমন লিঙ্ক - কোনও রাষ্ট্র পরিচালনার কোনওোটাই নেই), বা অন্যথায় অসন্তুষ্টিজনক।
এটি জটিল হওয়ার দরকার নেই।
আমি ওআউথের বিশেষজ্ঞ নই, তবে আমি টুইটার এবং টুইটপিকের সাথে সফলভাবে ব্যবহার করি এমন একটি OAuth ক্লায়েন্ট-সাইড ম্যানেজার ক্লাস তৈরি করেছি। এটি ব্যবহার করা তুলনামূলক সহজ এটি ওপেন সোর্স এবং এখানে উপলভ্য: Oauth.cs
পর্যালোচনার জন্য, ওআউথ ০.০ এ ... মজাদার, এখানে একটি বিশেষ নাম এবং এটি একটি "স্ট্যান্ডার্ড" বলে মনে হচ্ছে তবে যতদূর আমি জানি কেবলমাত্র একমাত্র পরিষেবা যা "OAuth 1.0a" প্রয়োগ করে তা হল টুইটার। আমার ধারণা এটি যথেষ্ট স্ট্যান্ডার্ড । ঠিক আছে, যাইহোক OAuth 1.0a এ, ডেস্কটপ অ্যাপ্লিকেশনগুলির জন্য এটি যেভাবে কাজ করে তা হ'ল:
আপনি, অ্যাপটির বিকাশকারী, অ্যাপটি নিবন্ধ করুন এবং একটি "গ্রাহক কী" এবং "গ্রাহক গোপনীয়তা" পান। আরস্টেচনিকায়, এই মডেলটি কেন সেরা নয় তার একটি বিশদ লিখিত বিশ্লেষণ রয়েছে তবে তারা যেমন বলে, এটি এটিই ।
আপনার অ্যাপ্লিকেশন চলমান। প্রথমবার এটি চলার পরে, এটি টুইটার এবং তার বোন পরিষেবাগুলিতে (টুইটপিকের মতো) ওউথ-প্রমাণীকরণযোগ্য আরআরএসটি অনুরোধ করার জন্য ব্যবহারকারীকে স্পষ্টভাবে অ্যাপটির অনুমোদনের প্রয়োজন হবে। এটি করার জন্য আপনাকে অবশ্যই অনুমোদিত অনুমোদনের মধ্য দিয়ে যেতে হবে, এতে ব্যবহারকারীর সুস্পষ্ট অনুমোদন জড়িত। এটি প্রথমবার অ্যাপটি চালিত হওয়ার পরে ঘটে। এটার মত:
- একটি "অনুরোধ টোকেন" অনুরোধ। আক সাময়িক টোকেন।
- একটি ওয়েব পৃষ্ঠাতে পপ করুন, সেই অনুরোধটি টোকেনকে ক্যোয়ারী প্যারাম হিসাবে পাস করবে। এই ওয়েব পৃষ্ঠাটি ব্যবহারকারীকে ইউআই উপস্থাপন করে "আপনি কি এই অ্যাপ্লিকেশনটিতে অ্যাক্সেস দিতে চান?"
- ব্যবহারকারী টুইটার ওয়েব পৃষ্ঠায় লগ ইন করে এবং মঞ্জুরি দেয় বা অ্যাক্সেস অস্বীকার করে।
- প্রতিক্রিয়া এইচটিএমএল পৃষ্ঠা প্রদর্শিত হবে। যদি ব্যবহারকারী অ্যাক্সেস মঞ্জুর করে থাকে তবে 48-pt ফন্টে একটি পিন প্রদর্শিত হবে
- ব্যবহারকারীকে এখন উইন্ডোজ ফর্ম বাক্সে সেই পিনটি কেটে / পেস্ট করতে হবে এবং "নেক্সট" বা অনুরূপ কিছুতে ক্লিক করুন।
- ডেস্কটপ অ্যাপ্লিকেশন তার পরে একটি "অ্যাক্সেস টোকেন" এর জন্য একটি ওউথ-প্রমাণীকরণের অনুরোধ করে। আরইএসইএসটির অনুরোধ।
- ডেস্কটপ অ্যাপ্লিকেশনটি "অ্যাক্সেস টোকেন" এবং "অ্যাক্সেস সিক্রেট" গ্রহণ করে।
অনুমোদনের নাচের পরে, ডেস্কটপ অ্যাপটি ব্যবহারকারীর পক্ষে অনুমোদিত অনুরোধগুলি করতে কেবল ব্যবহারকারী-নির্দিষ্ট "অ্যাক্সেস টোকেন" এবং "অ্যাক্সেস সিক্রেট" (অ্যাপ্লিকেশন-নির্দিষ্ট "গ্রাহক কী" এবং "গ্রাহক গোপন" সহ) ব্যবহার করতে পারে টুইটারে। এগুলির মেয়াদ শেষ হয় না, যদিও ব্যবহারকারী যদি অ্যাপটিকে অ-অনুমোদন দেয়, বা যদি কোনও কারণে টুইটার আপনার অ্যাপ্লিকেশনটিকে অ-অনুমোদন দেয় বা আপনি যদি নিজের অ্যাক্সেস টোকেন এবং / বা গোপন হারিয়ে ফেলে থাকেন তবে আপনাকে আবার অনুমোদনের নৃত্য করতে হবে ।
আপনি যদি চালাক না হন তবে UI প্রবাহটি মাল্টি-স্টেপ OAuth বার্তা প্রবাহকে মিরর সাজিয়ে দিতে পারে। আরও ভাল উপায় আছে।
একটি ওয়েব ব্রাউজার নিয়ন্ত্রণ ব্যবহার করুন, এবং ডেস্কটপ অ্যাপের মধ্যে অনুমোদিত ওয়েব পৃষ্ঠাটি খুলুন। যখন ব্যবহারকারী "অনুমতি দিন" ক্লিক করেন, তখন সেই ওয়েব ব্রাউজার নিয়ন্ত্রণ থেকে প্রতিক্রিয়া পাঠ্যটি ধরুন, পিনটি স্বয়ংক্রিয়ভাবে এক্সট্রাক্ট করুন, তারপরে অ্যাক্সেস টোকেনগুলি পান। আপনি 5 বা 6 টি HTTP অনুরোধগুলি প্রেরণ করেন তবে ব্যবহারকারীর কেবলমাত্র একটি একক অনুমতি / অস্বীকার ডায়ালগ দেখতে হবে। সহজ।
এটার মত:
আপনি যদি ইউআই বাছাই করে ফেলেছেন তবে কেবলমাত্র চ্যালেঞ্জটিই রয়ে গেছে oauth- স্বাক্ষরিত অনুরোধগুলি উত্পাদন করা। এটি প্রচুর লোককে ট্রিপ করে কারণ ওউথ স্বাক্ষরকরণের প্রয়োজনীয়তাগুলি নির্দিষ্ট ধরণের। সরলিকৃত OAuth ম্যানেজার শ্রেণি এটি করে।
একটি টোকেনের অনুরোধ করার জন্য কোডের উদাহরণ:
var oauth = new OAuth.Manager();
// the URL to obtain a temporary "request token"
var rtUrl = "https://api.twitter.com/oauth/request_token";
oauth["consumer_key"] = MY_APP_SPECIFIC_KEY;
oauth["consumer_secret"] = MY_APP_SPECIFIC_SECRET;
oauth.AcquireRequestToken(rtUrl, "POST");
এটি এটি । সহজ। আপনি কোড থেকে দেখতে পাচ্ছেন, ওউথ প্যারামিটারগুলিতে যাওয়ার উপায় স্ট্রিং-ভিত্তিক সূচক, অভিধানের মতো কিছু। অ্যাকুইয়ারআরকিউস্টটোকেন পদ্ধতি সেবার ইউআরএলকে একটি ওউথ-স্বাক্ষরিত অনুরোধ প্রেরণ করে যা অনুরোধ টোকেনকে, অস্থায়ী টোকেনকে মঞ্জুরি দেয়। টুইটারের জন্য, এই URL টি " https://api.twitter.com/oauth/request_token " ken দ্য ওউথ স্পেক বলছে আপনাকে একটি নির্দিষ্ট উপায়ে (ইউআরএল-এনকোডড এবং এম্পারস্যান্ড দ্বারা যুক্ত হওয়া) ওউথের প্যারামিটারগুলির সেট (টোকেন, টোকেন_সেক্রেট, ননস, টাইমস্ট্যাম্প, গ্রাহক_কি, সংস্করণ এবং কলব্যাক) প্যাক করতে হবে এবং একটি অভিধানে- সাজানো অর্ডার, সেই ফলাফলটিতে একটি স্বাক্ষর তৈরি করুন, তারপরে স্বাক্ষরের পাশাপাশি সেই একই পরামিতিগুলি প্যাক আপ করুন, নতুন oauth_signature প্যারামিটারে সঞ্চিত, অন্যভাবে (কমা দ্বারা যুক্ত)। OAuth ম্যানেজার শ্রেণি স্বয়ংক্রিয়ভাবে আপনার জন্য এটি করে। এটি ন্যাক্স এবং টাইমস্ট্যাম্পগুলি এবং সংস্করণগুলি এবং স্বাক্ষরগুলি স্বয়ংক্রিয়ভাবে উত্পন্ন করে - আপনার অ্যাপ্লিকেশনটিকে সেই জিনিসটির যত্ন নেওয়া বা সচেতন হওয়ার দরকার নেই। কেবলমাত্র oauth প্যারামিটারের মানগুলি সেট করুন এবং একটি সহজ পদ্ধতি কল করুন। পরিচালক শ্রেণি অনুরোধটি প্রেরণ করে এবং আপনার প্রতিক্রিয়াটি পার্স করে।
ঠিক আছে, তাহলে কি? অনুরোধটি টোকেন পাওয়ার পরে আপনি ওয়েব ব্রাউজারের ইউআই পপ করবেন যাতে ব্যবহারকারী স্পষ্টভাবে অনুমোদনের অনুমতি দেবে। আপনি যদি এটি সঠিকভাবে করেন তবে আপনি এটি এম্বেড করা ব্রাউজারে পপ করবেন। টুইটারের জন্য, এর জন্য ইউআরএলটি হল " https://api.twitter.com/oauth/authorize?oauth_token= " ওআউথ_ টোকেন সংযুক্ত সঙ্গে। কোড মতো এটি করুন:
var url = SERVICE_SPECIFIC_AUTHORIZE_URL_STUB + oauth["token"];
webBrowser1.Url = new Uri(url);
(আপনি যদি কোনও বাহ্যিক ব্রাউজারে এটি ব্যবহার করেন তবে আপনি ব্যবহার করতে পারেন System.Diagnostics.Process.Start(url)
))
Url বৈশিষ্ট্যটি সেট করার ফলে ওয়েব ব্রাউজার নিয়ন্ত্রণটি স্বয়ংক্রিয়ভাবে সেই পৃষ্ঠাটিতে নেভিগেট হয়।
যখন ব্যবহারকারী "অনুমতি দিন" বোতামটি ক্লিক করেন একটি নতুন পৃষ্ঠা লোড হবে। এটি একটি HTML ফর্ম এবং এটি সম্পূর্ণ ব্রাউজারের মতোই কাজ করে। আপনার কোডে, ওয়েব ব্রাউজার নিয়ন্ত্রণের ডকুমেন্টেড কমপ্লিটড ইভেন্টের জন্য কোনও হ্যান্ডলার নিবন্ধন করুন এবং সেই হ্যান্ডলারে পিনটি ধরুন:
var divMarker = "<div id=\"oauth_pin\">"; // the div for twitter's oauth pin
var index = webBrowser1.DocumentText.LastIndexOf(divMarker) + divMarker.Length;
var snip = web1.DocumentText.Substring(index);
var pin = RE.Regex.Replace(snip,"(?s)[^0-9]*([0-9]+).*", "$1").Trim();
এটি বেশ কিছু এইচটিএমএল স্ক্রিন স্ক্র্যাপিং।
পিনটি ধরার পরে আপনার আর ওয়েব ব্রাউজারের দরকার নেই, তাই:
webBrowser1.Visible = false; // all done with the web UI
... এবং আপনি এটিতে ডিসপোজ () কল করতেও পারেন।
পরবর্তী পদক্ষেপটি সেই পিনের সাথে অন্য একটি HTTP বার্তা প্রেরণ করে অ্যাক্সেস টোকেন পাচ্ছে। এটি অন্য একটি স্বাক্ষরযুক্ত ওওথ কল, যা আমি উপরে বর্ণিত ওউথ ক্রম এবং ফর্ম্যাটিং দিয়ে নির্মিত। তবে আবার এটি OAuth.Manager শ্রেণীর সাথে সত্যিই সহজ is
oauth.AcquireAccessToken(URL_ACCESS_TOKEN,
"POST",
pin);
টুইটারের জন্য, সেই URL হ'ল " https://api.twitter.com/oauth/access_token "।
এখন আপনার কাছে টোকেন অ্যাক্সেস রয়েছে এবং আপনি স্বাক্ষরিত HTTP অনুরোধগুলিতে এগুলি ব্যবহার করতে পারেন। এটার মত:
var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
... url
রিসোর্স শেষ পয়েন্ট। ব্যবহারকারীর স্ট্যাটাস আপডেট করতে এটি " http://api.twitter.com/1/statuses/update.xML?status=Hello " হবে।
তারপরে সেই স্ট্রিংটি অনুমোদনের নামে HTTP শিরোনামে সেট করুন ।
টুইটপিকের মতো তৃতীয় পক্ষের পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য আপনাকে এর থেকে কিছুটা আলাদা OAuth শিরোনাম তৈরি করতে হবে:
var authzHeader = oauth.GenerateCredsHeader(URL_VERIFY_CREDS,
"GET",
AUTHENTICATION_REALM);
টুইটারের জন্য, যাচাই করা শংসাপত্রের ইউআরএল এবং রিয়েলমের মানগুলি যথাক্রমে " https://api.twitter.com/1/account/verify_credentials.json ", এবং " http://api.twitter.com/ "।
... এবং করা যে একটি HTTP হেডার নামক অনুমোদন স্ট্রিং এক্স-যাচাই করুন-শংসাপত্রের অনুমোদন । তারপরে আপনার যে কোনও অনুরোধ প্রেরণ করছেন তা বরাবর টুইটপিকের মতো এটি আপনার পরিষেবাতে প্রেরণ করুন।
এটাই.
সব মিলিয়ে টুইটারের স্ট্যাটাস আপডেট করার কোডটি এরকম কিছু হতে পারে:
// the URL to obtain a temporary "request token"
var rtUrl = "https://api.twitter.com/oauth/request_token";
var oauth = new OAuth.Manager();
// The consumer_{key,secret} are obtained via registration
oauth["consumer_key"] = "~~~CONSUMER_KEY~~~~";
oauth["consumer_secret"] = "~~~CONSUMER_SECRET~~~";
oauth.AcquireRequestToken(rtUrl, "POST");
var authzUrl = "https://api.twitter.com/oauth/authorize?oauth_token=" + oauth["token"];
// here, should use a WebBrowser control.
System.Diagnostics.Process.Start(authzUrl); // example only!
// instruct the user to type in the PIN from that browser window
var pin = "...";
var atUrl = "https://api.twitter.com/oauth/access_token";
oauth.AcquireAccessToken(atUrl, "POST", pin);
// now, update twitter status using that access token
var appUrl = "http://api.twitter.com/1/statuses/update.xml?status=Hello";
var authzHeader = oauth.GenerateAuthzHeader(appUrl, "POST");
var request = (HttpWebRequest)WebRequest.Create(appUrl);
request.Method = "POST";
request.PreAuthenticate = true;
request.AllowWriteStreamBuffering = true;
request.Headers.Add("Authorization", authzHeader);
using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
MessageBox.Show("There's been a problem trying to tweet:" +
Environment.NewLine +
response.StatusDescription);
}
OAuth 1.0a প্রচ্ছদের নীচে এক ধরণের জটিল, তবে এটি ব্যবহার করার দরকার নেই। ওআউথ.ম্যানেজার আউটগোয়িং ওউথ অনুরোধগুলির প্রজন্ম এবং প্রতিক্রিয়াগুলিতে ওউথ সামগ্রী প্রাপ্তি এবং প্রক্রিয়াজাতকরণ পরিচালনা করে। যখন অনুরোধ_ টোকেন অনুরোধ আপনাকে একটি aথ_ টোকেন দেয়, আপনার অ্যাপ্লিকেশনটিকে এটি সঞ্চয় করার দরকার নেই। ওআউথ.ম্যানেজার স্বয়ংক্রিয়ভাবে এটি করতে যথেষ্ট স্মার্ট। তেমনিভাবে যখন অ্যাক্সেস_ টোকেন অনুরোধটি অ্যাক্সেস টোকেন এবং গোপনীয়তা ফিরে পায়, আপনার স্পষ্টভাবে সেগুলি সঞ্চয় করার দরকার নেই। OAuth.Manager আপনার জন্য সেই রাজ্য পরিচালনা করে।
পরবর্তী রানগুলিতে, আপনার কাছে ইতিমধ্যে অ্যাক্সেস টোকেন এবং গোপনীয়তা থাকলে আপনি OAuth.Manager ইনস্ট্যান্ট করতে পারেন:
var oauth = new OAuth.Manager();
oauth["consumer_key"] = CONSUMER_KEY;
oauth["consumer_secret"] = CONSUMER_SECRET;
oauth["token"] = your_stored_access_token;
oauth["token_secret"] = your_stored_access_secret;
... এবং তারপরে উপরের মতো অনুমোদনের শিরোনাম উত্পন্ন করুন।
// now, update twitter status using that access token
var appUrl = "http://api.twitter.com/1/statuses/update.xml?status=Hello";
var authzHeader = oauth.GenerateAuthzHeader(appUrl, "POST");
var request = (HttpWebRequest)WebRequest.Create(appUrl);
request.Method = "POST";
request.PreAuthenticate = true;
request.AllowWriteStreamBuffering = true;
request.Headers.Add("Authorization", authzHeader);
using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
MessageBox.Show("There's been a problem trying to tweet:" +
Environment.NewLine +
response.StatusDescription);
}
আপনি এখানে OAuth.Manager ক্লাস যুক্ত একটি ডিএলএল ডাউনলোড করতে পারেন । সেই ডাউনলোডটিতে একটি হেল্পফাইলও রয়েছে। অথবা আপনি অনলাইনে হেল্পফাইলে দেখতে পারেন ।
উইন্ডোজ ফর্মের একটি উদাহরণ দেখুন যা এই পরিচালককে এখানে ব্যবহার করে ।
কাজ উদাহরণ
কমান্ড-লাইন সরঞ্জামের একটি কার্যকারী উদাহরণ ডাউনলোড করুন যা এখানে বর্ণিত শ্রেণি এবং কৌশল ব্যবহার করে: