在准备ASP.NET面试时,了解一些关键的技术概念和问题是非常有帮助的。本文将深入探讨一些常见的面试问题,包括身份验证、授权、代码访问安全性等关键主题。
身份验证是确认用户身份的过程。在ASP.NET中,有几种不同的认证方式:
Passport身份验证是一种中心化的认证服务,由Microsoft Passport服务提供。如果实现.NET Passport单点登录(SSI)服务,就不需要自己实现自定义的认证机制。
Passport身份验证的工作原理是:它只进行认证(验证凭据),不进行授权(授予或拒绝对站点的访问)。因此,实现应用程序会检查Passport身份验证Cookie。如果Passport Cookie不可用,用户将被重定向到Passport登录页面。用户在登录页面上提供凭据,如果验证通过,身份验证Cookie将存储在客户端机器上,然后重定向到请求的页面。
使用Passport身份验证的优点包括:
在上述问题中已经讨论了认证,但另一个不同但相关的概念是授权。授权是授予已认证用户对资源的权限的过程。
“基于角色的安全性是一种用来在组织内基于用户角色实现授权的技术。这是一种更细粒度的方法,通过用户角色授予或撤销对资源的权限。”
在配置文件中授予或撤销权限的一个示例是:
<authorization>
<allow roles="MyDomain1\Administrators" />
<deny users="*" />
</authorization>
ASP.NET提供了几种安全控件,这些实际上是Web服务器控件。可以在Visual Studio工具箱中找到它们。
在上述ASP.NET安全性相关的面试问题中,讨论了基于用户角色限制对资源访问的基于角色的安全性。CAS(代码访问安全性)是一个完全不同的概念。它是.NET CLR的安全系统,通过应用安全策略来限制代码执行不需要的任务。使用CAS(代码访问安全性),可以限制代码可以做什么,以及什么代码可以调用代码。
根据文档,代码访问安全性的关键功能包括(直接来自MSDN):
代码访问安全性工具(Caspol.exe)可以用来启用或禁用代码访问安全性:
caspol -security on
caspol -security off
还可以列出所有代码组:
caspol -listgroups
模拟是一个用户假装成另一个用户的行为。默认情况下,ASP.NET使用与ASP.NET进程相同的用户帐户(即,网络服务)来执行应用程序代码。但是,通过启用模拟,它使用发出请求的用户的Windows身份来执行代码。
例如,如果用户'user1'登录,并且IIS设置为以网络服务运行。如果'user1'调用另一台计算机上的代码片段(可能是Web服务调用),另一台计算机将看到IIS用户而不是'user1'。但是,可以通过启用模拟来允许'user1'使用其Windows身份而不是网络服务来访问Web服务。
如何在ASP.NET中配置模拟:
<configuration>
<system.web>
<identity impersonate="true" />
</system.web>
</configuration>
<identity impersonate="true" userName="user" password="pwd" />