【问题标题】:Windows Authentication Initialization ASP.netWindows 身份验证初始化 ASP.net
【发布时间】:2013-10-23 12:01:44
【问题描述】:

在 ASP.net WebForms 项目中,我们目前使用表单身份验证,但客户端希望使用 Windows 身份验证。所以我更改了 web.config 以使用 Windows 身份验证。但是,应用程序需要一些用户输入并放入会话中,然后才能访问任何网页。我们目前在登录页面的回发中执行此操作。

由于 Windows 身份验证没有“登录”页面,如何实现?如果会话设置正确,我是否应该检查每个页面的 On_Init 事件..?

【问题讨论】:

    标签: asp.net webforms windows-authentication


    【解决方案1】:

    如果您需要在每个页面中都提供会话中的特定数据,最简单的方法是使用专用 模块 来检查会话可用的早期管道事件之一中的条件(获取请求状态事件听起来最合适)。

    public class CustomConditionCheckModule : IHttpModule
    {
        public void Init( HttpApplication context )
        {
            context.AcquireRequestState += new EventHandler( acq_req_state );
        }        
    
        public void acq_req_state( object sender, EventArgs e )
        {
            // check your condition there - the data is in session
            var session = HttpContext.Current.Session;
            if ( ... the condition ... )
               Response.Redirect( "~/anonymous.page.aspx" ); 
        }
    }
    

    那么你还需要一个可以匿名访问的页面(为此你需要web.config中的一个部分):

    <location path="anonymous.page.aspx">
      <system.web>
        <authorization>
          <allow users="*" />  
        </authorization>
      </system.web>
    </location>
    

    【讨论】:

      【解决方案2】:

      我认为您可以使用 LDAP(Active Directory 身份验证) 在 web.config 中使用 windows 身份验证,但如果其 Intranet Web 应用程序或其他方式,即 基于角色的安全性 使用 windows 身份验证。

      【讨论】:

      • 这没有回答问题。
      • @WiktorZychla:实际上,我回答说考虑到使用 LDAP 的 Windows 身份验证可以有自定义登录页面,其余的事情可以通过通常的方式来实现(就像他正在做的那样)。因为,正如我所提到的,我目前的项目也是以同样的方式做的。但是,如果它不是那样意味着客户不想要那样,那么你就是正确的方法。
      • 你可以尝试扩展你的答案。
      猜你喜欢
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多