1

私が書いている Web API サービスのユーザーを認証するために、この記事に従っています。

http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/

これはうまくいきます。

要約すると、暗号化されたリクエスト ヘッダーをチェックしてユーザーが誰であるかを判断するカスタム アクション フィルター (すべてのリクエストに適用される) を使用します。

ただし、コントローラーのアクション メソッドには、現在のユーザーが誰であるかを知る必要があるコードもあります。ActionFilter で実行されたロジックを繰り返すのではなく、アクション フィルターで変数を設定し、コントローラー アクション メソッドでそれを参照する方法はありますか?

また、actionFilter ではなく MessageHandler を使用するよう提案されていることも確認しました。それは何らかの形で役立ちますか?

基本的に、フィルターコードで現在のユーザーが誰であるかを何らかの形でフラグアップし、コントローラーでそれを参照できるようにする必要があります

それとも私はここから離れていますか?よりスマートな方法はありますか?ありがとう

4

3 に答える 3

4

プリンシパルを作成し、Thread.CurrentPrincipal に保存します。

その後、User.Identity を使用して Web Api コントローラーでアクセスできます。

この方法は私のマシンで機能します。

于 2012-08-14T19:06:21.970 に答える
3

オブジェクトには、HttpRequestMessageコントローラー アクションでアクセスできる任意の状態を追加できる Properties コレクションがあります。

HttpMessageHandlerの代わりにを使用した場合は、同じアプローチを使用しますActionFilter

于 2012-08-14T17:16:06.723 に答える
2

残念ながら、この種のセキュリティをサポートするメカニズムは組み込まれていません。

Request.Headers私たちのプロジェクトでは、すべての Web API 呼び出しで往復するコレクションでカスタム トークンを使用します。ActionFilterすべての非 GET リクエストで動作するカスタムを作成しました。からトークンを抽出し、 からアクセスできるRequest.Headersのトークンと比較します。IClaimsIdentityThread.CurrentPrincipal.Identity

于 2012-08-14T17:48:04.547 に答える