2016-09-30 11 views
1

Authorizeヘッダーを持ち、単純にビューにリダイレクトするコントローラアクションが呼び出されたときに、ユーザー名とパスワードの要求を回避する方法を解明しようとしています。ASP.NET MVCで承認が失敗した場合のカスタムエラーの表示方法

[Authorize(Roles = "DOMAIN\\Group")] 
    public ActionResult Index() 
    { 
     ...controller action code here 
    } 

を次のように私は私が属しているDOMAIN \グループに設定した場合、私は

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" cacheRolesInCookie="false"> 
    <providers> 
    <clear /> 
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
    </providers> 
</roleManager> 
<authentication mode="Windows" /> 
<authorization> 
    <deny users="?" /> 
</authorization> 

その後、私のコントローラでは、私はアクションを前置いている私のweb.configファイルで

アプリケーションが期待どおりに動作します。テスト用に偽のグループに変更すると、ユーザー名とパスワードのダイアログが表示されます。明らかに、認証は決して起こりません。ダイアログでキャンセルをクリックすると、401エラーページにリダイレクトされます。

web.configファイルの定義では、Windowsユーザーのみが接続できます.Windowsユーザーが選択したグループに属していない場合は、ユーザー名の入力を求めずに特定のビューにリダイレクトするだけですパスワード。

答えて

5

カスタム属性を作成し、HandleUnauthorizedRequestを上書きすることができます。承認が失敗した場合、カスタムページにリダイレクトします。

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
     else 
     { 
      filterContext.Result = new RedirectToRouteResult(new 
      RouteValueDictionary(new { controller = "Common", action = "AccessDenied" })); 
     } 
    } 
} 

[CustomAuthorize(Roles = "DOMAIN\\Group")] 
public ActionResult Index() 
{ 
    ... 
} 
+0

DOH !! .netとC#についてはかなり新しいので、カスタム検証クラスについては忘れてしまった。チャームのように働いた –

関連する問題