假冒
假冒是在其他用户标识的上下文中执行代码的过程。在默认情况下,所有的ASP.NET代码都是在Domain/ASPNET用户账户下执行的,要利用其他的标识执行代码,假冒其他的标识,我们应该利用.NET安全架构中的内置的假冒的功能。它允许我们指定执行代码的用户账户,比如不同于Domain/ASPNET的预定用户账户。我们既可以利用ASP.NET中身份验证功能来验证用户,也可以利用标准的Windows身份验证来验证用户。
然后我们可以利用我们的凭证,或者利用执行代码的预定义用户账户来设置所假冒的账户。
假冒还允许我们在不使用ASP.NET提供的身份验证和授权功能的情况下提供身份验证和授权:我们可以利用用户账户和他们相关权限支持Windows和IIS管理身份验证和授权。
假冒通常用于提供访问控制,比如授权,一个应用程序可以访问它所假冒的的用户可以访问的任何资源。例如,默认情况下,Domain/ASPNET用户不能对文件系统进行读写操作的,所以这个用户账户也无法在Enterprise Services中执行事务处理。但是利用假冒,用户就可以通过假冒一个特定的Windows账户完成这些事情,因为这个特定的账户有这个权限。因此,我们就可以保证一些用户可以对文件系统进行读写操作,而其他的一些用户仅仅执行读的操作。
好了,上面讲了很多,我们现在就来小结一下,看看如何把身份验证,授权,假冒一起用于Web程序中。
当用户首次访问Web站点时,他们是匿名用户,我们不知道他们的标识,除非对他们进行身份验证,否则我们以后还是不知道他们的标识。当用户请求非安全的资源时,他们可以自动的访问这个资源(这就是非安全资源的定义)
当用户请求安全的受保护的资源时,就要如下步骤:
·请求被发送到 Web服务器,由于此时这个用户标识还有被确认,所以用户就被重定向到登录页面
·用户提供凭证,身份验证就对凭证进行验证和审核
·如果用户凭证合法,就可以访问资源,否则,就不能。
当用户请求安全的资源,但是该资源有特定权限的用户才能访问,就会发生下面步骤:
·请求被发送到 Web服务器,由于此时这个用户标识还有被确认,所以用户就被重定向到登录页面
·用户提供凭证,身份验证就对凭证进行验证和审核
·把用户的凭证或者角色与被允许的用户或者角色进行比较,如果用户在列表中,那么他们就被准许访问这个资源,否则,拒绝。
如果启用了假冒,那么在这两种情况下,假冒都会发生。默认情况下,假冒是禁止的,可以修改配置文件添加元素启用:
以下为引用的内容:
<system.web>
<identity impersonate="true" userName="Xiaoyang/User" password="xiaoyang"/>
</system.web>
</configuration>
在中,把impersonate特性设置为true,拿userName和 password设为要假冒的用户账户。 如果假冒被启用,那么被审核的就是假冒的用户标识的凭证,而不是提交的凭证。这两种凭证有可能相同,需要注意的是:假冒是利用Web服务器中已有的用户访问,如IUser用户。