您的位置:首页 > 编程语言 > ASP

asp.net中web用户身份验证的一种方式。

2015-02-28 09:29 531 查看
之间时间有限,往往实现了功能以后,就不去细究实现的原理,以至于很多时候都是一知半解。既然开始写blog了,那就搞明白这些东西。

最近的项目需要用到asp.net中web的用户身份验证,只允许通过验证的人看到他自己的信息。

之前实现过一次,但是没有细究,以至于现在来做的话,还得回去看相应的代码。

其实关键的代码,就在这两部分:

<authentication mode="Forms">//标示,authentication用的模式是forms。authentication mode="Forms"

标签内的是包含验证的具体细节:

1、验证页的名字,2、验证也的url,开放类型,3、path,这个参数还不是很了解,后面查一下。

timeout标示验证信息的在用户不操作后的有效时间。

<authortization>标签是授权内容

这里,只添加了一条,就是对匿名身份用户的拒绝:

<deny users="?"/>

好了,我准备在新的项目里面,手动打入这些信息,来完整基本的用户身份验证和授权。

不过打开新项目的web.config后看到如下内容:

<?xml version="1.0" encoding="utf-8"?>

<!--

有关如何配置 ASP.NET 应用程序的详细信息,请访问

http://go.microsoft.com/fwlink/?LinkId=169433
-->

<configuration>

<system.web>

<compilation debug="true" targetFramework="4.0" />

</system.web>

</configuration>

首先来看一下什么是web.config

度娘来助:

Web.config文件是一个XML文本文件,它用来储存ASP.NETWeb 应用程序的配置信息(如最常用的设置ASP.NETWeb 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。

在运行时对Web.config文件的修改不需要重启服务就可以生效(注: 节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。

我们知道了web.config的作用了,至于里面的具体的设置,下面来看,不过需要足矣的地方是:每个目录都可以有一个web.config。这说明其实IIS的保护机制其实是以设置文件夹的可访问性来实行的(不知道我的这个理解是否正确,暂时就这样延伸理解吧)

另外就是web.config的修改不需要重启程序,就可以生效。

有点傻眼。这些标签,我并不能完全理解其意思。好了

下面来开始百度、谷歌和bing。

首先<?xml version="1.0" encoding="utf-8"?>

说明此文件是xml,希望用到这个文件的对象,按照xml来处理这个文件。并请按照1.0版本和encoding="utf-8"的方式来解码文件中的信息。

xml是一种通用的,也许会是将来在不同平台,不同设备,甚至是不同类型的硬件之间进行交换,而不必去管,你是用的安卓,IOS,windows或是其他智能家居之类上的设备等等。

再来看下一行:

<configuration>意思是设置的意思,我这里认为他是web.config的最外层标签()

以上是我自己的理解:度娘验证:以下所有的代码都应该位于 <configuration> 和 </configuration>

再来看<system.web>,

度娘:


4. <system.web>


<system.web>为.net应用程序的行为方式配置节点,该节点包含很多子节点,很多子节点已经由.net配置好了,这里我们只来看看一些重要的配置节点。

<customErrors>

1、一段实例:

<customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly">

<error statusCode="500" redirect="InternalError.htm"/>

</customErrors>

2、

<compilation>只是软件系统的编译信息:实例:

<compilation debug="true" targetFramework="4.0" />

3、最感兴趣的问题:

验证:<authentication>节点

<authentication>节点控制用户对网站、目录或者单独页的访问,必须配合<authentication>节点一起使用
有四种方式:
Windows
使用Windows身份验证,适用于域用户或者局域网用户。

Forms 使用表单验证,依靠网站开发人员进行身份验证。

Passport 使用微软提供的身份验证服务进行身份验证。

None 不进行任何身份验证。好坏优劣暂时先一方,

下面继续来完成新项目中的验证。手动写,而不是复制黏贴。
<authentication mode="Forms">
<forms name="form1" defaultUrl="Default.aspx"></forms>
写上了这些,还需要什么内容呢?还需要添加保护模式和认证过期时间。
好的,我的验证邠写好了,再来看授权部分。即通过验证后的用户,可用有哪些权利。
写入<authorization>后又抓瞎:
本来以为会给authorization添加属性,不过看代码示例以后,只需要添加子标签即可,并且子标签不多,用的到的是<deny>和<allow>不过子标签内部怎么写?
继续看代码示例。
不过子标签<deny>和<allow>的属性会有比较多项目,暂时用的到的是user。其他暂时不看,毕竟,今天或明天需要交任务。
这里的<deny user="?">只是拒绝匿名用户。其实也没设置多少权限信息。
好了,到这里,简单的授权也实现了
但是当我验证的时候,出现如下问题:

无法找到资源。

说明: HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下
URL 并确保其拼写正确。

请求的 URL: /login.aspx

版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.5.27.0

问题解决了,不过解决的方式很奇怪,就是必须添加/login.aspx页面,

好吧,我妥协了,加入了这个界面。

另外,设置了验证和权限,就得有验证逻辑。

配合这个使用
System.Web.Security.FormsAuthentication.SetAuthCookie(“”, false);

再回头来看看这个函数的背后
不过我发现这其实是另外一个话题,那就是cookies
好吧,这个就放在后面的一个话题里面来说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: