现在的位置: 首页 > 综合 > 正文

ASP.NET 2.0 角色控制与管理

2012年09月30日 ⁄ 综合 ⁄ 共 6518字 ⁄ 字号 评论关闭

1.       认证与授权机制

l         ASP.NET 2.0安全必要性

对于网站而言,用户身份认证与权限管理是非常重要的部分。通过用户名和密码,对用户进行身份验证,并指派他可访问的资源,这部分工作一直都是网站开发的重要内容。

在另外一些情况下,需要根据用户的身份进行权限识别,不同用户访问相同页面,也需要显示不同内容。这设计到用户权限管理部分,也是网站开发的核心内容。

l         ASP.NET 2.0角色控制概述

ü         ASP.NET 2.0membershiprole manager能够非常好的解决这个问题,不但可以对用户的登陆信息进行统一管理,还可以就用户的权限进行分类管理,让开发者方便的就网站权限与安全性进行设定。这种设定以前都需要我们自己写一个库,但是现在就可以快速的进行设定。

ü         ASP.NET 2.0Login控件更提供了一种非常方便的建造登陆与用户管理信息的方法。

l         认证与授权

ASP.NET 通过与IIS协同工作来进行授权管理。共用两种身份认证方式。

ü        通过查询acls列表或者许可证来判断该访问是否拥有浏览的权利。(acls指可以访问的列表,这个列表记录了访问者是谁,他是否可以访问我们的资源。)

ü        通过URL认证

l         认证方式

当用户以访问某网站的时候。两种授权方式会分别进行不同的动作。第一种认证方式会根据用户的登陆信息来判定asp.net针对该用户所指定的系统账号,然后再判断该系统账号是否对被请求的本地资源有访问权限。(第一种方式主要是通过IIS的配置来实现的,这里不是本文的重点)。第二种身份认证通过检查ASP.NET 配置文件来进行授权认证。

ASP.NET 的页面认证方式中,可以使用以下三种方式进行身份认证。

取值

描述

None

不进行授权与身份验证

Windows

基于windows身份验证,首先判断windows用户的身份和组

Form

基于cookie的身份认证机制

PassPort

使用PostPort SDK进行二次开发

注:在广域网中不可能使用这种Windows身份验证。域在大也不可能管理的了那么多。

Passport是微软提供的基于广域网的一种识别方式,这种方式比较特殊。有点类似Windows,是指一次登陆处处使用的概念。一旦在Passport登陆以后,所有使用PassPort方式的网站都不需要再进行登陆。身份认证信息都存在你的本地。使用passport的用户都需要对passport sdk进行二次开发。对于一个网站开发来说可能增加了开发的复杂度。所以一般使用Form认证方式就可以了。

通过修改config文件中的authentication属性,可以配置不同的认证方式。

认证方式:

每个网站都有一个Web.nfig文件,这个文件是记录这个网站的配置信息的。其中有这么一段:

<configuration>

       <system.web>

              <authentication mode = “Forms”/>//授权模式,可以是以上表格中的几种取值,确定认证方式。

       </system.web >

</configuration >

ü         Windows认证方式

    Windows认证方式通过使用windowsprincipal类对用户的windows身份进行判定,然后根据用户所属的windows身份组来进行认证。

示例:Windows Authentication(需要在web.config里加上<authentication mode = “Windows”/>

<%@ Page Language="C#" runat=server AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

 

 <script runat=server>

    protected void Page_Load(object sender, EventArgs e)

    {

   

        AuthUser.Text = User.Identity.Name;

        AuthType.Text = User.Identity.AuthenticationType;

    }

 </script>

 

<head runat="server">

    <title>无标题页</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <span style="font-family: Verdana">使用 Windows Authentication</span><table bordercolor="black"

            rules="all" style="font-size: 8pt; font-family: Verdana; border-collapse: collapse;

            background-color: #ccccff; bordercolor: black" width="700">

            <tr>

                <td>

                    用户:</td>

                <td>

                    <asp:Label ID="AuthUser" runat="server"></asp:Label>

                </td>

            </tr>

            <tr>

                <td>

                    认证方式:</td>

                <td>

                    <asp:Label ID="AuthType" runat="server"></asp:Label>

                </td>

            </tr>

        </table>

   

    </div>

    </form>

</body>

</html>

运行效果:

使用 Windows Authentication

用户:

7EDD5807D52E414"qimu

认证方式:

NTLM

说明:7EDD5807D52E414是计算机名。Qmu是我的用户名

NTLM是指windows登陆方式。

这种方式的好处在于,如果是在域集成的用户中,每个用户登陆自己的PC之后,Server端就可以根据他本人的权限在在域中找到他所对应的权限,然后在他登陆网站的时候,用户不需要再输入一次登陆账号和密码了。局域网中使用较多,广域网中使用比较少。

ü         From认证方式

From认证方式是在窗体内提供用户输入ID和密码的地方,并根据用户输入的ID和密码进行身份认证。

From认证方式同时还使用cookie记录用户的信息,当用户访问其他页面的时候,程序通过访问cookie来获得用户的身份信息。

Ø         From认证方式配置文件

<configuration>

     <system.web>

    <authentication mode="Forms">

      <forms name=".ASPXUSERDEMO" loginUrl="Default2.aspx" protection="All" timeout="60" path = //>

   <!--protection = "[All|None|Encryption|Validation]"-->

 </authentication>

    <authorization>

      <deny users="?" />

    </authorization>

    </system.web>

</configuration>

Ø         From认证方式配置文件讲解

配置文件中的属性意义如下表所示

属性

描述

LoginUrl

指定一个用于登陆的页面,没有认证直接跳过登陆页面时,自动跳转到登陆页面。

Name

Cookie的名字,注意:如果一个服务器有很多应用的话,要给Cookie起不同的名字。

Timeout

Cookie的存活时间默认值是30分钟

Protection

Cookie被保存的方式,不保护起来将会很麻烦!

path

Cookie被保存的时间

Ø         Protection属性

Protection是用来描述Cookie的保存方式,有下列四个可选择项目。

属性

描述

None

不使用任何方法包含Cookie(不提倡)

Encryption

使用Des或者三层DesCookie进行加密,但是并不对Cookie传输中是否被监听或篡改进行监视。

Validation

监视Cookie,保证传输过程中不会被监听或者篡改。但是并不对Cookie进行加密。(发给谁,就只能又谁发回)

All

同时使用EncryptionValidation。(提倡)

Web.config部分:

    <authentication mode="Forms">

      <forms name=".ASPXUSERDEMO" loginUrl="Default2.aspx" protection="All" timeout="60" path = "/"/>

    </authentication>

    <authorization>

      <deny users="?" />

</authorization>

Default2部分:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<%@ Import Namespace="System.Web.Security " %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

 <script language="C#" runat="server">

    protected void Login_Click(object sender, EventArgs e)

    {

        //authenticate user: this samples accepts only one user with

        // a name of qimu and a password of '123'

        if (UserEmail.Value == "qimu" && UserPass.Value == "123")

        {

            FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);

        }

        else

        {

            Msg.Text = "用户名密码错误,请重新尝试";

        }

    }

 </script>

<head runat="server">

    <title>无标题页</title>

</head>

<body>

    <form id="form3" runat="server">

    <div>

        <span style="font-family: Verdana">登陆页</span><table style="font-family: Verdana">

            <tr>

                <td>

                    Email:</td>

                <td>

                    <input id="UserEmail" runat="server" type="text" /></td>

                <td>

                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="UserEmail"

                        Display="Static" ErrorMessage="*"></asp:RequiredFieldValidator></td>

            </tr>

            <tr style="color: #000000">

                <td>

                    Password:</td>

                <td>

                    <input id="UserPass" runat="server" type="password" /></td>

                <td>

                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="UserPass"

                        Display="Static" ErrorMessage="*"></asp:RequiredFieldValidator></td>

            </tr>

            <tr style="color: #000000">

                <td>

                    记住 Cookie:</td>

                <td>

                    <asp:CheckBox ID="PersistCookie" runat="server" />

                </td>

                <td>

                </td>

            </tr>

        </table>

        <asp:Button ID="Button1" runat="server" OnClick="Login_Click" Text="登陆" />

        <p>

            <asp:Label ID="Msg" runat="server" ForeColor="red"></asp:Label>

        </p>

   

    </div>

    </form>

</body>

</html>

Default3.aspx.cs部分:

    protected void Page_Load(object sender, EventArgs e)

    {

        Welcome.Text = "Hello, " + User.Identity.Name;

    }

Default2部分:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

 

<!DOCTYPE html

抱歉!评论已关闭.