之间时间有限,往往实现了功能以后,就不去细究实现的原理,以至于很多时候都是一知半解。既然开始写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的作用了,至于里面的具体的设置,下面来看,不过需要足矣的地方是:每个目录都可以有一个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
好吧,这个就放在后面的一个话题里面来说。