2016-11-14 7 views
0

私のASP MVCプロジェクトでは、私はOWIN CookieAuthenticationを実装しました。許可されていないリクエストを除き、すべて正常に動作します。ユーザーがアクセスを許可されていないエンドポイントをヒットOwin権限のないユーザーからユーザーがサインアウトしない

  1. ユーザーがログイン
  2. ユーザーで: は例えば、流れを考えます。それがユーザーに発生した場合

    [Authorize(Roles = "SomeRoleUserDontHaAssigned")] 
    public ActionResult SomeAction()... 
    

    は(大丈夫です)/ログインルートをアカウントにリダイレクトされますが、彼は(私が期待している)ログオフしません:。で制限

Cookieを手動で削除する(またはAccount/SignOutを呼び出す)独自のAuthorizeAttributeを実装する必要があります。または私は何かを逃していますか?

+1

なぜそんなことが期待されますか?ユーザーとしては、アクセスしていないリソースにアクセスするたびに再ログインする必要がある場合、私は少し怒っていました。カスタムAuthorizeAttributeを使用して行うことはできますが、それは可能でしょうか? –

+0

私はあなたのポイントを参照してください。私はそれをもう少し詳しく説明する必要があります:私はあなたと完全にユーザーの経験の観点から同意します。私が実際に言いたかったのは、すでにログインページにリダイレクトされていれば、すでにログインしているユーザーのログインのポイントは何ですか?それは本当に悪いですか?一方、完全な適切な解決策はもちろん、カスタムの「アクセス拒否」ページにリダイレクトすることです。 Btw、それはどこに設定されていますか? –

+0

私はあなたの質問を完全に理解することができません。制限されたページにアクセスした場合、どのようにログオフする必要がありますか?ユーザーがログに記録される唯一の方法は、クッキーが死んだとき、または認証マネージャー(authenticationManager.SignOut) – SaadK

答えて

1

1つのコメントには当てはまらないので、これを答えに入れることにしました。

まず、HTTPステータスコードの基本に戻ってください。

3.1:401と403

RFC 7235仕様から - あなたは、認証と認可の話をするときに興味のある二つの主要なコードがあります。 401不正(https://tools.ietf.org/html/rfc7235#section-3.1

401(不正な)ステータスコードが、ターゲットリソースに対する有効な認証クレデンシャル を欠いているので、要求が が適用されていないことを示しています。

6.5.3。禁断403(https://tools.ietf.org/html/rfc7231#section-6.5.3

403(禁止)ステータスコードは、サーバが 要求を理解していることを示し、それを許可することを拒否する。一般公開を希望するサーバ は、その理由を応答内に記述することができます。 ペイロード(存在する場合)。

つまり、401は認証に問題があることを示します(ユーザーは認証されていないか、間違って認証されています)。有効な資格情報を入力して再試行できます。同時に、403はアクセス許可に問題があることを意味します。サーバーはユーザーが誰であるかを知っていますが、アクセスを拒否します。同じ資格情報で再試行しないでください。

OWIN CookieAuthenticationがそこに着くだけで、401エラーコードが返されるのを待ち受けます。このようなコードが検出された場合、応答はリターンアドレスを維持してログインページにリダイレクトされます。

AuthorizeAttributeの名前にもかかわらず、実際には401ステータスコードが生成されます。 https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/AuthorizeAttribute.cs#L155

したがって、ログインページに移動します。

これを変更したい場合は、独自のAuthorizeAttributeを実装する必要があります。その後、ユーザーがすでにログインしているかどうかを確認して、403ステータスを返すことができます。ユーザーがログインしていない場合は、401を返すだけです。

+0

ご意見ありがとうございます。それはちょうど私があなたが言及したのと同じ理由でやったことです:httpの仕様。問題はAuthorizeAttributeが401として両方を解釈するという事実のようです。それの背後にある理由を理解するのは難しいですが、私たちはそれと一緒に生活しなければならないと思います。トピックに完全な明瞭さをもたらしたため、回答をマークしてください。 –

関連する問題