小编Jim*_*im 的帖子

将Windows身份验证重定向到自定义401页面

我们正在转换一些以前在表单身份验证下运行的Web应用程序,现在作为Windows身份验证运行.我想重新创建表单身份验证的页面安全性,只需对实际页面进行最少的修改.我能够使用简化的Web应用程序重新创建我想要的效果.我在Server 2008 R2集成管道IIS 7.5上运行应用程序.

我使用Windows身份验证创建了一个简单的3页应用程序 这三页是:

  • Openpage.aspx,对任何经过身份验证的用户开放
  • 阻止所有用户的Blockedpage.aspx(符号表示将根据用户角色阻止用户子集的目录或页面)
  • ErrorPage.aspx,如果访问(并拒绝)blockedpage.aspx,应用程序应转发到ErrorPage.aspx,其中用户获取有关应用程序的一般信息.

该应用的Web.Config:

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
      <authentication mode="Windows"/>
      <authorization>
        <deny users="?" />
        <allow users="*" />
      </authorization>
    </system.web>
  <location path="blockedpage.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <system.webServer>
   <httpErrors errorMode="Custom" >
      <remove statusCode="401" subStatusCode="-1" />
      <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" />
    </httpErrors>

    <validation validateIntegratedModeConfiguration="false" />
    <defaultDocument>
      <files>
        <clear />
        <add value="openpage.aspx" />
      </files>
    </defaultDocument>
  </system.webServer>

</configuration>
Run Code Online (Sandbox Code Playgroud)

(如果我不尝试在asp.net级别重定向401错误,我只是得到标准的"未授权消息",这不是我想给用户的效果.)

但是,我收到一个我不明白的错误 - 每次服务器重置时,应用程序都会停止工作.IIS只返回401错误,直到浏览器弹出手动登录控件,这是无法满足的.(我从不希望我的用户看到浏览器登录提示)

但是,如果我在设置应用程序后(通过编辑Web配置或使用服务器GUI更新它)删除部分,访问页面,然后再添加部分,则替换httperrors部分,应用程序开始工作正如预期的那样,并一直持续到服务器重新启动,此时它开始再次为用户提供手动登录弹出窗口,这是他们无法解决的.

1)这是使用Windows身份验证来保护应用程序的正确方法吗?是否有更好的方法来配置像表单一样无法访问的目录,但仍提供自定义错误页面?)

2)这是集成管道的影响,为什么它以这种方式工作?

asp.net iis windows-authentication iis-7.5

5
推荐指数
1
解决办法
4535
查看次数

Web API - 支持的动词?

我把共同为本地代码阵营谈话,我试图了解ApiController HTTP动词的细微差别.约ApiController几件事情Beta版,RC最终版本,并建议之间显著改变你如何设置这是相互矛盾的,有时甚至是错误的.

假设我刚刚离开WebApiConfig中的标准路由:

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
Run Code Online (Sandbox Code Playgroud)

(因为你真的可以把东西放在自己的头上,如果你在{}动作添加参数点击这里)

我理解约定如何适用于简单的Crud调用:

    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }


    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    public void Post([FromBody]string value)
    {
    }
Run Code Online (Sandbox Code Playgroud)

或者你可以改变这些,只要它们以动词名称开头:

    // GET api/values/5
    public string GetMyStuff(int id)
    {
        return "value";
    }
Run Code Online (Sandbox Code Playgroud)

但是,最初的规范说ApiController支持Get,Put,Post和Delete.然而,我可以添加方法:

    public void HeadOfTheClass()
    {
    }
Run Code Online (Sandbox Code Playgroud)

哪个适用于Head动词,但我无法为隐藏或不存在的动词添加方法:

    public void MKCOL()
    {
    }
    public void Bubba()
    { …
Run Code Online (Sandbox Code Playgroud)

asp.net-web-api asp.net-web-api-routing

2
推荐指数
1
解决办法
2821
查看次数