Asp.net移动开发指南(9)

移动Web网站安全性

构建安全的网站始终是应该优先考虑的事情。当构建可能通过公共数据网络传输敏感信息的移动Web应用程序时,还需要另外考虑一些安全注意事项。

ASP.NET中的安全性由3个不同方面组成:身份验证、授权和加密。身份验证建立用户的标识。授权方式帮助控制用户可以访问或不能访问的内容。加密机制帮助在客户端和服务器之间传递数据时保护数据。ASP.NET移动控件使用安全基础结构,该基础结构与Internet信息服务(IIS)及Microsoft .NET Framework一起提供安全方面的支持,以保护Web应用程序。

.NET Framework支持集成Windows身份验证与授权、Passport身份验证、窗体身份验证和基于Cookie的身份验证。下面介绍.NET Compact Framework 2.0对这4种验证方式的支持情况。

1.7.1 Windows身份验证与授权

Internet信息服务(IIS)与ASP.NET一起提供与客户端协商基于Microsoft Windows的身份验证的功能。在未受保护的应用程序(例如某个使用匿名身份验证的应用程序)中,从不考虑请求用户的特定标识,而是通过使用在IIS安装过程中设置的默认帐户执行请求。使用Internet服务管理器,开发人员从可用的Windows身份验证模型(包括基本身份验证、简要身份验证和集成Windows身份验证)中进行选择。可以使用Microsoft管理控制台的Internet服务管理器管理单元对这些设置进行配置。IIS根据浏览器支持哪些身份验证方法以及为应用程序启用了哪些身份验证方法协商凭据。

当今市场上的许多移动设备仅支持基本身份验证。基本身份验证是受到最广泛支持的凭据交换机制,但就其本身来说并不安全,这是因为此方法不进行加密。使用基本身份验证,将以明文形式传输用户名和密码。如果不使用安全套接字层(SSL)协议保护应用程序,则数据很容易为外人截获。对于这些情况,强烈建议使用HTTPS

1.7.2 Passport身份验证

Passport身份验证是由Microsoft提供的集中身份验证服务,该服务为成员站点提供单一登录和核心配置文件服务。由于Passport是基于Cookie的身份验证服务,而Pocket PC设备不支持Cookie,因此ASP.NET不支持将Passport与移动设备一起使用。

但是由于各种原因,目前只有窗体身份验证方式适合用于移动设备。本节介绍适合移动设备的窗体身份验证方案,以及为确保各种设备可以访问应用程序所必须采取的步骤。

1.7.3 基于Cookie的身份验证

基于Cookie的身份验证是通过浏览器身份验证模型,使用Cookie实现用户跟踪的身份验证方法。因此与Passport身份验证一样,由于Pocket PC设备不支持Cookie,所以无法通过这种方法进行身份验证。

1.7.4 窗体身份验证

Forms身份验证是为身份验证用户提供的.NET Framework结构的一部分,该结构没有使用IIS身份验证基元。事件的一般顺序如下:

1)客户端请求某页。

2)如果用户尚未经过身份验证,则将浏览器重定向到配置中指定的登录窗体。

3)客户端在回发到服务器的窗体中提供凭据。

4)服务器验证该凭据,写出客户端Cookie,然后重定向回原始页。

5)检查身份验证Cookie并提供原始页。

很明显,Pocket PC设备不支持Cookie,在第4步将出现问题。但是ASP.NET移动控件为了避免这个问题,通过MobileFormsAuthentication.RedirectFromLogin页将身份验证信息写入到查询字符串中,从而代替了使用Cookie。为了避免每次请求时都将用户重定向到登录页,可在每个请求中将身份验证信息作为查询字符串的一部分提供。ASP.NET提供一种方法用于在相对URL的查询字符串中携带这种数据。

ASP.NET提供的窗体身份验证,支持在应用程序中创建登录页并管理身份验证,并且不需要使用计算机或域中的单独帐户。在.NET Compact Framework中,窗体身份验证的基本思路是在每个请求URL中检查身份验证字符串。如果未找到身份验证字符串、身份验证字符串无效,则用户被重定向到登录页(默认情况下,该页为login.aspx)。提供窗体身份验证的登录页与任何.aspx页相同。该登录页上有一个供用户提交凭据的窗体。当用户发送要求的数据时,将在代码中执行身份验证检查,然后用户将被重定向到当初请求的页,并且记录下该身份验证字符串。

为了演示窗体身份验证,需要修改web.config文件,并且添加默认登录页面login.aspx和一个测试登录的页面FormsAuth.aspx。在web.config文件需要添加以下配置:

<authentication mode="Forms" />

<authorization>

    <deny users="?" />

</authorization>

web.config包含了各种专门针对Web应用程序的配置信息,比如Session管理和错误处理以及访问控制权限等配置。web.config中的<authorization>标记使用<allow><deny>子标记来实现配置访问控制权限。<allow>标记定义可以访问资源的用户,<deny>标记定义不可访问资源的用户。通过web.config进行配置的访问控制只对ASP.NET本身的资源有用(比如ASPXASMXASCX文件资源),对于非ASP.NET资源(比如ASPTXT、图像文件等)都不能提供访问控制。以上代码框内的配置代码,设置了匿名用户不能访问任何ASP.NET资源。

login.aspx页面的窗体设计如图19-16所示,对应的login.aspx.vb文件代码如清单1-21所示。FormsAuth.aspx页面窗体设计如图19-17所示,对应的FormsAuth.aspx.vb文件代码如清单1-22所示。

1-16 login.aspx窗体设计

清单1-21 login.aspx.vb

Partial Class WebSecurity

    Inherits System.Web.UI.MobileControls.MobilePage

    Protected Sub cmdLogin_Click(ByVal sender As Object, _

    ByVal e As System.EventArgs) Handles cmdLogin.Click

        If UserEmail.Text = "software2002" And UserPass.Text = "123456" Then

            Mobile.MobileFormsAuthentication.RedirectFromLoginPage

            (UserEmail.Text, False)

        Else

            message.Visible = True

            message.Text = "登录用户名和密码不正确"

        End If

    End Sub

End Class

1-17 FormsAuth.aspx窗体设计

清单1-22 FormsAuth.aspx.vb

Partial Class FormsAuth

    Inherits System.Web.UI.MobileControls.MobilePage

    Protected Sub formA_Load(ByVal sender As Object, _

    ByVal e As System.EventArgs) Handles formA.Load

        label1.Text = String.Format("Welcome {0}", User.Identity.Name)

    End Sub

    Protected Sub cmdLoginOut_Click(ByVal sender As Object, _

    ByVal e As System.EventArgs) Handles cmdLoginOut.Click

        Mobile.MobileFormsAuthentication.SignOut()

        ActiveForm = formB

    End Sub

End Class

清单1-21中演示了MobileFormsAuthentication的用法。在该示例中验证以software2002为用户名,以123456为密码的用户登录。清单19-22中的System.Web.Mobile.Mobile FormsAuthenticationSignOut方法,用于清除Cookie或额外的查询字符串参数。

http://hi.baidu.com/zhiwei%5F117/blog/item/0d021630a75f58a25edf0e17.html

加支付宝好友偷能量挖...


评论(0)网络
阅读(94)喜欢(0)Asp.Net/C#/WCF