• 也谈Asp.net 中的身份验证(转载)


    一、配置安全身份验证模式


    在Web.config 文件中,通过 <authentication> 节可以配置 ASP.NET
    使用的安全身份验证模式,以标识传入的用户。


     <authentication mode="[Windows|Forms|Passport|None]">
    <forms>...</forms>
    <passport/>
    </authentication>

    <authentication> 节的mode 为必选的属性。指定应用程序的默认身份验证模式。


    此属性可以为下列值之一:


    ○  Windows :将 Windows 验证指定为默认的身份验证模式。将它与以下任意形式的 Microsoft
    Internet 信息服务 (IIS) 身份验证结合起来使用:基本、摘要、集成 Windows 身份验证 (NTLM/Kerberos)
    或证书。在这种情况下,您的应用程序将身份验证责任委托给基础 IIS。


    ○  Forms :将 ASP.NET 基于窗体的身份验证指定为默认身份验证模式。


    ○  Passport :将 Microsoft Passport Network 身份验证指定为默认身份验证模式。


    ○  None :不指定任何身份验证。您的应用程序仅期待匿名用户,否则它将提供自己的身份验证。


    默认值为 Windows


     


    二、设置基于窗体的身份验证



    当ASP.NET 基于窗体的身份验证<authentication mode="Forms">
    时,其<forms> 子节点为窗体自定义身份验证配置。


    示例如下:


    <authentication mode="Forms">
    <forms cookieless="UseDeviceProfile"
    defaultUrl="Default.aspx"
    loginUrl="Login.aspx"
    name="cnblogs"
    slidingExpiration="false"
    timeout="15"
    />
    </authentication>

    ○  cookieless :定义是否使用 Cookie 以及 Cookie 的行为。默认值为
    UseDeviceProfile ;


    ○  defaultUrl :定义在身份验证之后用于重定向的默认 URL。默认值为
    default.aspx ;


    ○  loginUrl :指定如果找不到任何有效的身份验证 Cookie,将请求重定向到的用于登录的 URL。默认值为
    login.aspx ;


    ○  name :指定要用于身份验证的 HTTP Cookie。默认值为 ".ASPXAUTH"


                 如果正在一台服务器上运行多个应用程序,并且每个应用程序都需要唯一的Cookie,则必须在每个应用程序的 Web.config
    文件中配置 Cookie 名称。


    ○  slidingExpiration :指定是否启用弹性过期时间。


           > True 指定启用弹性过期时间。在单个会话期间,身份验证 Cookie
    被刷新,并且每个后续请求的到期时间被重置。在 .NET Framework 1.x 版中,默认值为 True


           >  False 指定不启用可调过期,并指定 Cookie
    在最初发出之后,经过一段设定的时间间隔后过期。在 .NET Framework 2.0 版中,默认值为 False


    ○  timeout :指定 Cookie 过期前逝去的时间(以整数分钟为单位)。如果
    SlidingExpiration 属性为 true,则
    timeout 属性是滑动值,会在接收到上一个请求之后的指定时间(以分钟为单位)后过期。为防止危及性能并避免向开启
    Cookie 警告的用户发出多个浏览器警告,当指定的时间逝去大半时将更新 Cookie。这可能导致精确性受损。持久性 Cookie 不超时。默认值为
    "30"(30 分钟)。


     


    三、配置 Web 应用程序的授权


    接下来添加<authorization> 节配置 Web 应用程序的授权,以控制客户端对 URL 资源的访问。


    <authorization>
    <allow ...="" />
    <deny ...="" />
    </authorization>

    <authorization> 授权:顺序是先写allow,再写deny,不然就会出现问题。


    allow :向授权规则映射添加一个规则,该规则允许对资源进行访问。


    deny :向授权规则映射添加一条拒绝对资源的访问的授权规则。


    示例如下:


    <authorization>
    <deny users="?" />
    </authorization>

    <deny  users="?" />  表示拒绝访问的用户。问号 (?) 表示拒绝匿名用户;星号 (*)
    表示拒绝所有用户访问。若添加用户名列表使用逗号分隔。


     


    设置完毕后,Web.config 文件的整体配置如下:


    <!--
    通过 <authentication> 节可以配置 ASP.NET 使用的
    安全身份验证模式,以标识传入的用户。
    -->
    <authentication mode="Forms">
    <forms cookieless="UseDeviceProfile"
    defaultUrl="Default.aspx"
    loginUrl="Login.aspx"
    name="newerSize"
    slidingExpiration="false"
    timeout="15"
    />
    </authentication>
    <!-- <authorization>授权:顺序是先写allow,再写deny,不然就会出现问题。 -->
    <authorization>
    <deny users="?"/>
    </authorization>

     


    四、在页面程序中使用Forms 身份验证


    在页面程序的后台代码中,我们使用FormsAuthentication
    为Web 应用程序管理 Forms 身份验证服务。


    在登录页面Login.aspx 中,代码如下:


    //登录
    protected void btnLogin_Click(object sender, EventArgs e)
    {
    string name = txtName.Text.Trim();
    string pwd = txtPwd.Text.Trim();
    if ("Andy" == name && "123" == pwd)
    {
    //方式一
    //FormsAuthentication.RedirectFromLoginPage(name, true);
    /*参数二为true:表示创建持久 Cookie(跨浏览器会话保存的 Cookie)*/
    //方式二
    //为用户创建一个票证,并将其放入cookie或者url中(具体看你怎么设置票证的保存方式)
    FormsAuthentication.SetAuthCookie(name, true);
    Response.Redirect("Default.aspx");
    }
    else
    {
    Response.Write("<script>alert('登录失败!')</script>");
    }
    }
    //注销
    protected void btnExit_Click(object sender, EventArgs e)
    {
    //从浏览器删除 Forms 身份验证票证。
    FormsAuthentication.SignOut();
    }


    登录成功后,跳转到的默认页面Default.aspx 中,代码如下:


    protected void Page_Load(object sender, EventArgs e)
    {
    //User:获取有关发出页请求的用户的信息。
    string username = User.Identity.Name;
    Label1.Text = username + ":登录成功!";
    }

    User.Identity.Name 用于获得Cookie 中的用户名。


     











    作者: XuGang   网名:钢钢
    出处: http://www.cnblogs.com/xugang/
    声明: 本文版权归作者和博客园共有!转载时必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    一步步打造QQ群发消息群发器
    正确理解IEnumerable和IQueryable两接口的区别
    分享破解公众号裂变涨粉工具、吸粉方案。
    快40岁了,我还要不要继续写代码呢?
    精准营销、批量提取QQ群成员号码
    分享一个公众号h5裂变吸粉源码工具
    C#(.NET) HMAC SHA256实现
    mybatis的<if>标签,<foreach>标签,<collection>标签,<association>标签以及useGeneratedKeys用法
    springBoot解决跨域问题
    springBoot实现文件上传与下载
  • 原文地址:https://www.cnblogs.com/ycxyyzw/p/2109840.html
Copyright © 2020-2023  润新知