6

現在、クライアント側の C# アプリケーションで OAuth 2.0 User-Agent Flow を使用しようとしていますが、リダイレクト URI に関連する混乱に直面しています。

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

私の質問は、この状況でアクセストークンをキャッチするにはどうすればよいですか? どうやら「クライアントがアクセスできるローカル リソース」を作成できるようですが、この背後にある仕組みに慣れておらず、トピックに関するリソースが見つかりません (何を探すべきかわからないため)。

どこから探し始めるべきかについての指針は大歓迎です。


編集:さらに掘り下げると、次のstackoverflowの質問が明らかになりました:

OAuth に対してローカルで開発するにはどうすればよいですか?

私は彼らが提案したことをさらに調査していますが、他の提案も同様に素晴らしいでしょう.


編集:さらに検索すると、この記事が明らかになりました:

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

全体像を理解せずに暗闇の中でぶらぶらしているように感じますが、localhost を使用してローカル Web サービスをセットアップし、リダイレクト URI をそこに向ける必要があると思います。次に、Web サービスを使用して OAuth サーバーからの応答をアンラップし、アプリケーションが適切に応答するようにします。今後もアップデートが予定されています。


オーケー。そのため、収集できたものから、OAuth のコールバックとして提供するローカル Web サービスをセットアップする必要があります。上記のWebサービスを自分でリッスンし、コールバックをキャッチしてアプリに渡す必要があります。ただし、VS2010 が提供する既定の ASP.NET Web サービスは URL パラメーターをサポートせず、API 呼び出しのみをサポートしているため、代わりに WCF Rest スターター キットを使用する必要があるようです。

私はこのすべてに完全に慣れていないので、この時点でのヒントは天の恵みです. 一般的には、ローカルの WCF Rest サービスをセットアップし、そのローカル URI をコールバックとして OAuth に提供し、Rest サービスを使用してコールバック URL をキャッチすることを考えています。次に、URL を解析してアクセス トークンを抽出します。この時点で、私のアプリはアクセス トークンを要求しますか? それとも、私の Web サービスは私のアプリにトークンを「与える」ことができますか? つまり、制御の軌跡はどこにあるべきか?

4

3 に答える 3

5

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

この埋め込み WebBrowser を認証 URL にポイントし、ユーザーがログインして Salesforce で認証し、アプリにアクセス許可を付与できるようにしました。次に、Salesforce に組み込みブラウザを、私が指定したダミーのリダイレクト URL にリダイレクトさせます。このリダイレクトは実際にはどこにも行かず、404 として表示されるだけです。

ただし、WebBrowser.Url を監視することで、Salesforce によって追加されたアクセス トークンを含め、埋め込まれた WebBrowser コントロールが送信される URL 全体を取得できます。基本的に、ユーザーが認証して許可を与えると、組み込みブラウザーは「http://www.dummyurl.com」にリダイレクトされます。Salesforce がアクセス トークンを追加するため、WebBrowser.Url は次のようになります。

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

ここから、URL を解析して先に進むことができます。サードパーティの Web サーバーやローカル Web サービスは必要ありません。:)

于 2012-06-01T19:40:49.457 に答える
2

必要な Authorization タイプを呼び出して、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>
于 2012-06-01T13:38:26.547 に答える
0

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

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

この助けを願っています。

よろしく

于 2013-05-28T07:00:13.067 に答える