2012-01-12 13 views
-1
私がやろうとしています何

ジェネリックOAuthのライブラリC#

が(ただ、TwitterやLinkedInにフォースクエアのような)全てのサービスにOAuthのフローを処理するためにGeneric Library in C#を書きます。最も難しい部分は、私はsimulate all the user input in codeにして、 "OK、私はそれを許可する"のようなボタンをクリックしたり、ユーザ名/パスワードを書き込んだりするようなユーザアクションは必要ないということです。私はこれまで持って

疑問:

1 - TwitterのAPIのauthenticity_tokenの使い方いただきましたか?

2 - 私はOAuth Flowの一般的な使い方を実装できるように、すべてのサービスが使用する要因は何ですか。たとえば、私は最初のステップが実行するジェネリックメソッドを作るのは本当に簡単だとわかりました。私がしなければならないことは、webRequestのURLを変更することです.BAM、私はリクエストトークンを持っています。

3 - サービスごとに検証者を取得するにはどうすればよいですか?例えばLinkedIn Serviceでは、この値を取得するためにページを解析することができましたが、twitter APIの場合はverifierが見つかりません。ブラウザで私のアプリケーションを許可している場合でも、フロー中のHTMLにはVerifierは表示されません。

観察:

1 - それはであり、私はOAuthのライブラリの多くがthisthatのもののように、そこにあることを知っているが、私は私がしたいものを作ることができます何のライブラリが存在しませんユーザーの入力を求めるプロンプトを表示せずに、ユーザーを認証し、承認します。

2 - 私はユーザー入力を求めることはできません。認証のためのユーザー名とパスワードのようなすべての値はハードコードされ、すべてのユーザーはこの要求に対して同じアカウントを使用します。

3 - 私も知っていますが、ここには私が書いた記事がありますが、ほとんど同じ疑問があります。私が再ポスティングするのは、それをより鮮明にすることです。

4 - 英語の間違いや概念の誤解を前もって申し訳ありません。

基本的なコードサンプル:

これは、例えば、私は、任意のサービスのためのリクエストトークンを取得するために(つまり、広く海外にウェブavaibleである)を使用しています方法です。私がしなければならないのは、REQUEST_TOKENの値をサービスに使用する特定のURLに変更することです。そのため、LinkedIn、Twitter、またはFoursquareのトークンを取得できます。しかし、私は他のステップで同じプロセスを適用することはできません。

public string AuthorizationLinkGet() 
    { 
     string ret = null; 

     string response = oAuthWebRequest(Method.GET, REQUEST_TOKEN, String.Empty); 
     if (response.Length > 0) 
     { 
      //response contains token and token secret. We only need the token. 
      NameValueCollection qs = HttpUtility.ParseQueryString(response); 

      if (qs["oauth_callback_confirmed"] != null) 
      { 
       if (qs["oauth_callback_confirmed"] != "true") 
       { 
        throw new Exception("OAuth callback not confirmed."); 
       } 
      } 

      if (qs["oauth_token"] != null) 
      { 
       ret = AUTHORIZE + "?oauth_token=" + qs["oauth_token"]; 
      } 
     } 
     return ret; 
    } 

答えて

2

OAuthは、ユーザーがそのボタンを1回押す必要があるように設計されています。自動化すると、アプリケーションキーが取り消され、プログラムはもはや機能しなくなります。

権限トークンをローカルに保存して再利用する必要があります。ユーザーが「許可する」を1回クリックすると、その後の接続で認証トークンを再利用します。有効期限が切れていないことを確認する必要があります。また、再承認するだけであれば、再度[許可する]をクリックします。

OAuthを正しく実行しているWebサイトでは、Webサイトの承認を迂回することはできません。また、ユーザー名とパスワードをクエリで渡してトークンを取得するものもありますが、Web認証がある場合は、それをやる。

あなたがOAuthのプロバイダとコンシューマであれば、Dropboxはv0のAPIに対応しています(古いAPIへのリンクが見つからない場合、誰でもこの記事を編集できます)。 Webページを使用せずに自動化トークンを返す特別なアドレスにユーザー名とパスワードを入力します。または、OAuthとは異なる認証方式を使用する必要があります。

+0

本当ですか? それで、必要はありません、私はそれをmannualyできますか?なぜなら、先月LinkedInを使って、ユーザー入力を求めるプロンプトを表示せずにユーザー(ユーザー名、パスワード)を接続するだけだったからです。 「これは私をハッカーにしてくれるのですか?」と冗談を言っているので、私はすべてのサービスのためにこれをすることができないと言っていますか? –

+0

私はプロバイダではなく、私はサービスのAPIを使用してコンシューマになります。 –

+1

OAuth SDKは、これを行うことを許可していない理由があります。あなたはそれをすると思わないので、ユーザーは承認すると考えられます。理論的には、一度だけ行う必要があります。 –