2012-05-31 11 views
5

現在、クライアントサイドのC#アプリケーションでOAuth 2.0ユーザーエージェントフローを使用しようとしていますが、リダイレクトURIに関するいくつかの混乱が生じています。C#デスクトップアプリケーションを使用したOAuthユーザーエージェントフロー

私はclientsideアプリケーションを使用しているため、標準のリダイレクトURLをWebサーバーに提供することはできません。しかし、私が(Salesforce、この例では)認証しようとしている人によると、User-Agent Flowはクライアントサイドアプリケーションに使用する正しいものです。

私の質問は、この状況でアクセストークンをキャッチするにはどうすればよいですか?どうやら私は "クライアントにアクセスできるローカルリソース"を作成することができますが、私はこれの背後にある仕組みには慣れていませんし、そのトピックに関するリソースも見つけられません。

私がどこから見始めなければならないかについての指針は非常に高く評価されます。


編集:私はいくつかは、より多くの彼らが提案するもので調査やっているが、任意の他の提案も同様に素晴らしいことだ

How do I develop against OAuth locally?

:いくつかのより多くの掘削は、次のstackoverflowの質問を明らかにしました。


編集:いくつかは、より多くの検索この記事を明らかにした:私は暗闇の中でチャンスをうかがってるよう

http://sarangasl.blogspot.com/2010/09/create-simple-web-service-in-visual.html

はまだ大きな画像を理解せずに感じているが、私は私がする必要があると考えていますlocalhostを使用してローカルWebサービスを設定し、そこでリダイレクトURIをポイントします。次に、Webサービスを使用してOAuthサーバーからの応答をアンラップし、アプリケーションが適切に応答するようにします。さらなるアップデートが来る


Ooookay。だから、私が集めることができたことから、OAuthのコールバックとして提供するローカルWebサービスを設定する必要があります。私は自分自身で言ったWebサービスを聞いてコールバックをキャッチして、それを私のアプリケーションに渡す必要があります。しかし、VS2010が提供するデフォルトのASP.NET WebサービスはURLパラメータをサポートしていないので、WCF Restスターターキットを使用する必要があります。

私はこのすべてに対して完全に外国人です。だから、この時点ではどんなヒントも神の贈りものになるでしょう。一般的には、ローカルのWCF Restサービスを設定し、そのローカルURIをコールバックとしてOAuthに提供し、Restサービスを使用してコールバックURLを取得すると考えています。次に、URLを解析してアクセストークンを抽出します。この時点で、私のアプリケーションはアクセストークンを要求するのですか、私のWebサービスがトークンを私のアプリケーションに "与える"ことはできますか?コントロールの場所はどこにあるべきですか?

答えて

4

これを回避するための巧妙な方法を考え出しました。 OAuthのリダイレクトURLをリスンするサービスを設定する代わりに、Windowsフォーム内にWebBrowserコントロールを埋め込みました。

私はこの埋め込みWebブラウザを認証URLに向け、ユーザーがSalesforceでログインして認証し、私のアプリケーションにアクセス許可を与えるようにしました。次に、私はSalesforceに埋め込みブラウザを、私が提供するダミーのリダイレクトURLにリダイレクトさせました。このリダイレクトは実際にどこにでも置かれることはありませんが、それは404として表示されます。

WebBrowser.Urlを監視することで、埋め込まれたWebBrowserコントロールが指し示すURL全体Salesforceによって。基本的に、ユーザーが認証して権限を与えた後、組み込みブラウザは "http://www.dummyurl.com"にリダイレクトされます。ここから

http://www.dummyurl.com#access_token=ABCDEF&instance_url=ABCDEF

、私はちょうどURLを解析し、私の方法で行くことができます:SalesforceはWebBrowser.Urlはこのような何かを探して終わるので、アクセストークンを追加します。サードパーティのWebサーバーまたはローカルWebサービスは必要ありません。 :)

+2

これはオプションになります。ただし、ブラウザの履歴、ページの更新、タイムアウト、ネットワークの停止などの前進や後退など、ユーザーはWebブラウザでいくつかのトリックを使用することができます。すべてのHTTPエラーコード+すべての組み込みブラウザの不快なトリックを処理する必要があります。幸運:) –

+0

あなたのアプリのUIは、おそらく、Salesforceが提案したものとは違っていると思われます。あなたがコントロールできないため、デフォルトを変更することはできません。 –

+0

ああ、そうです。次に、組み込みのブラウザセキュリティを見ていく必要があります。私のアプリは、特定のイベントでポップアップを生成するバックグラウンドプロセスなので、認証はアプリの起動ごとに1回(通常は1日に1回、午前中にのみ)必要です。しかし、ヒントをお寄せいただきありがとうございます。私は埋め込まれたIEインスタンスで開かれる可能性のあるセキュリティホールについて忘れていました。 – sichinumi

1

Authonomous Client http://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_on_Force.com#Obtaining_a_Token_in_an_Autonomous_Client_.28Username-Password_Flow.29が必要な認証タイプを呼び出します。あなたがそこに送る必要があるURLについて読んでください。

grant_type=password&client_id=<your_client_id>&client_secret=<your_client_secret>&username=<your_username>&password=<your_password> 
+0

私はこの流れを残念ながら使用することはできません。認証しようとしているIPがホワイトリストに登録されていない場合、パスワードにはユーザーのセキュリティトークンを追加する必要があります。これはアプリケーションのオプションではありません。 – sichinumi

+0

ホワイトリストに登録されているプロキシを挿入します。さらにリンクが 'POST'されているので、リクエストパラメータはHTTPSで暗号化されます。このアプローチに問題はありますか? –

+0

うーん、私はそれを代理するとは思わなかった。しかし、私は他のビジネス環境の他のユーザーのためにこのアプリを開発しています。サードパーティのプロキシ経由ですべてのトラフィックをルーティングすることはオプションではありません。また、ユーザーの異なる組織のホワイトリストを管理することもできません。最後に、私はAPI開発者からUser-Password OAuthフローを避けるよう明示されました。私は個人的にそれに問題はありませんが、私の他の答えを見て、あなたがそれについて何を考えているかを教えてください。 :) – sichinumi

0

DotNetOpenAuthライブラリを使用できます。 DotNetOpenAuthライブラリによって提供されるClientAuthorizationViewというwinformsコントロールを使用するWPFを使用する例があります。

これは、ユーザーがアプリケーションを離れずにクライアントを認証できるブラウザをホストするコントロールです。

このヘルプが必要です。

よろしくお願いいたします。

関連する問題