12

私はasp.netで簡単なWebサイトに取り組んでいます。特定の AD グループのユーザーのみが許可されるように、サイドへのアクセスを制限したいと考えています。私はそれをしました、そしてそれはうまくいきます。しかし、AD グループに属していないユーザーがサイトにアクセスしようとすると、ログイン プロンプトが表示されます。ログイン プロンプトを表示する代わりに、許可されていないユーザーをカスタム ページにリダイレクトするにはどうすればよいですか?

以下は私のweb.configです。コードの最下部は、私が試したものですが、機能しませんでした。

<configuration>
<system.web>
  <compilation debug="true" targetFramework="4.0" />
  <authentication mode="Windows"/>
  <authorization>
    <allow roles="DOMAIN\GROUP"/>
    <deny users="*"/>
  </authorization>
</system.web>

<location path="AccessDenied.aspx">
<system.web>
<authorization>
  <allow users="*"/>
</authorization>
</system.web>
</location>
</configuration>

これを Global.asax.cs に追加しました。

protected void Application_EndRequest(Object sender, EventArgs e)
    {
        if (HttpContext.Current.Response.Status.StartsWith("401"))
            {
                HttpContext.Current.Response.ClearContent();
                Server.Execute("AccessDenied.aspx");
            }
}

何か案は ?

編集: 投稿されたソリューションのいくつかを試しましたが、機能しませんでした。 しかし、私はこのコードで動作しました:

void Application_EndRequest(object sender, System.EventArgs e)
    {
        if (((Response.StatusCode == 401)
        && (Request.IsAuthenticated == true)))
        {
            Response.ClearContent();
            Response.Redirect("~/AccessDenied.aspx");
        }
    }
}
4

4 に答える 4

2

すべての "Unauthorized" エラーを処理したい場合:

<customErrors defaultRedirect="Error.aspx" mode="On">
    <error statusCode="401" redirect="Unauthorized.aspx" />
    <error statusCode="403" redirect="Forbidden.aspx" />
</customErrors>

401 (承認されていない) 要求は Unauthorized.aspx に転送されます。

于 2013-09-06T08:13:01.750 に答える
1

私はこれでより多くの成功を収めました:

      // This is a workaround for the fact that we are not using MVC and its attributes
      // This is the situation where a user is logged in - but not authorized for this page
      void Application_EndRequest (object sender, System.EventArgs e)
      {
         if (((Response.StatusCode == 302) && (Request.IsAuthenticated == true)))
         {
            try
            {
               string sLoc = Response.Headers ["Location"];
               if (sLoc.Contains ("Login"))
               {
                  Response.ClearContent ();
                  Response.Redirect ("~/AccessDenied.aspx");
               }
            }
            catch
            {
            }
         }
      }
于 2017-03-28T22:28:10.867 に答える