1

VS 2012 で Entity Framework Code-First と WPF-Application をクライアントとして使用して、MVC 4 Web Api を作成しました。

現時点で私が苦労している問題は、クライアントからの認証を有効にし、Api へのアクセスをユーザーに許可する必要があることです (たとえば、認証されたすべてのユーザーは GET メソッドにアクセスできますが、POST または DELETE を使用できるのは管理者だけです)。フォーム認証が既に含まれているため、MVC 4 インターネット アプリケーションを使用しました。これは、クライアント アプリケーションからログインしようとするまで問題なく機能していました。私の問題を調査するのにしばらく時間を費やした後、フォーム認証は主に Web ブラウザーで動作することになっていることに気付きました。CookieContainers を使用して HttpClient で動作させるための解決策をいくつか見つけました (例: HttpClient の HttpRequestMessage で Cookie を設定するにはどうすればよいですか) が、何もうまくいきません。
私がやろうとしていることを達成する方法を調査するのに数時間を費やした後、私は完全に立ち往生しているように感じます
.. .
Web ブラウザー以外のクライアントに接続するときにフォーム認証を使用する方法が本当にない場合、どの認証/承認方法を使用するのが最適ですか?

何時間も調査した後、ますます混乱するだけなので、この場合に何が最適かについてのヒントを誰かが提供してくれれば、とてもうれしいです。

助けてくれてありがとう!

4

1 に答える 1

2

これは十分に簡単に実行できるはずですが、問題が実際に何であるかをまだ述べていません。あなたは

  1. ログインしていないため、Web API アクションにアクセスできません。また
  2. 承認を強制することはできません (つまり、アクションへの匿名アクセスを取得できます)

2 番目のシナリオの場合:

サーバー側のASP.NET Web API で認証と承認を使用する方法と、アクションにさまざまな役割を適用するさまざまな方法の概要が非常によくわかります。

ASP.NET Web API をセキュアにする方法には、マシン ツー マシン (つまり、ログインの詳細をアプリケーション ダイアログ ボックスに入力するユーザーがいない場合) に適した別のアプローチもありますが、そうではありません。 SimpleMembershipProvider の使用に焦点を合わせます。フレームワークの auth&auth コンポーネントを使用する代わりに、トークンを使用します (このアプローチには注意してください - 独自のセキュリティを正しく設定するのは非常に困難です)。

最初のシナリオの場合:

クライアント側からは、ユーザーが操作する C# アプリケーションがあるように思えます。これが事実である場合 (マシン間のシナリオではなく)、フォーム ベースのアプローチは依然として適切であり、Cookie を使用して正しいことを行っています。アプローチは次のようになります。

  • クライアントに、アプリケーションにユーザー名とパスワードを入力するように依頼します
  • AccountsController の LogIn アクションにリクエストを送信します。これにより、認証 Cookie、セッション Cookie などが返されます。
  • この (成功した) ログインから返された Cookie を保存します (または、応答が「ログインに失敗しました」の場合はクライアントに通知します)
  • 次に、これらの Cookie を Web API へのリクエストで使用します

の使用について既に話しているHttpClientので、このために何をしているのかを知っていると思いますので、コード サンプルは提供していません。HttpClient価値があるので、私は , を使用しませんが、これにより、プロパティを通じてHttpWebRequestコモンを維持できます。CookieContainerHttpWebRequest.CookieContainer

于 2013-05-13T09:54:57.107 に答える