首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

Asp.Net Forms验证实例


    2、自定义角色提供程序
   
    如果要按照角色进行验证的话,肯定要涉及到角色提供程序,在默认情况下也是会去连接默认的数据库的,我们可以自己写一个角色提供程序来实现自己的逻辑。
    首先在web.config中加入配置:
    Code
        <roleManager defaultProvider="MyRoleProvider"
          enabled="true"
          cacheRolesInCookie="true"
          cookieName=".ASPROLES"
          cookieTimeout="30"
          cookiePath="/"
          cookieRequireSSL="false"
          cookieSlidingExpiration="true"
          cookieProtection="All" >
          <providers>
            <clear />
            <add name="MyRoleProvider"
              type="MyRoleProvider"
              writeExceptionsToEventLog="false" />
          </providers>
        </roleManager>这个就是指定我们的角色提供类MyRoleProvider。
        这个类必须从System.Web.Security.RoleProvider继承,只要重载实现一个方法就可以了(其他方法返回异常):
        public override string[] GetRolesForUser(string username)
        {
            FormsIdentity Id = HttpContext.Current.User.Identity as FormsIdentity;
            if (Id != null)
            {
                return Id.Ticket.UserData.Split(new Char[] { ',' });
            }
            return null;
        }也就是从我们之前保存到Cookie中的值取得用户角色(FormsAuthentication会自动把保存的cookie转化成User内的值)

    之后我们就可以在web.config中配置角色验证规则了:
      <location path="admin">
        <system.web>
          <authorization>
            <allow roles="Admins"/>
            <deny users="*"/>
          </authorization>
        </system.web>
      </location>或者也可以在代码中判断:
    bool a = User.IsInRole("testt");判断起来还是很方便的。

    四、单点登录
   
    使用Forms的单点登录主要是通过machineKey的配置,machineKey 元素对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证
    使用这种方式的单点登录目前只能实现相同主机或相同子域站点之间的同步登录,比如www.cnblogs.com和firstyi.cnblogs.com可以实现,但是www.cnblogs.comwww.sina.com.cn就不能实现了,对于非同一父域名下的域名间不能跨站登录
    主要配置如下:
      <machineKey validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141" decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099" validation="SHA1"/>
      <authentication mode="Forms">
          <forms loginUrl="login.aspx" name=".ASPXAUTH1" domain=".cnblogs.com" />
      </authentication>要实现单点登录的多个web站点的machineKey必须一样,forms里面的name和domain也必须一样
    这样配置好之后,在其中一个站点登录后再调转到另一个站点就不需要再次登录了。
    注:如果MOSS网站采用Forms验证方式的话,只要把MOSS站点的对应配置改成和自己的Asp.Net站点一致,那么可以从自己的站点直接进入MOSS站点,也不需要重新登录(MOSS站点和自己的站点要有相同的用户名)

    其他:
    Forms验证之后可以使用以下方法退出登录:
    FormsAuthentication.SignOut();
    另外这些登录的后台Module是配置在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config文件中的:
    <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/>
    <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>
    <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>

上一页  [1] [2] 

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航