ASP.NET 面试问题解答

在准备ASP.NET面试时,了解一些关键的技术概念和问题是非常有帮助的。本文将深入探讨一些常见的面试问题,包括身份验证、授权、代码访问安全性等关键主题。

身份验证

身份验证是确认用户身份的过程。在ASP.NET中,有几种不同的认证方式:

  • Windows身份验证
  • 表单身份验证
  • Passport身份验证

Passport身份验证是一种中心化的认证服务,由Microsoft Passport服务提供。如果实现.NET Passport单点登录(SSI)服务,就不需要自己实现自定义的认证机制。

Passport身份验证的工作原理是:它只进行认证(验证凭据),不进行授权(授予或拒绝对站点的访问)。因此,实现应用程序会检查Passport身份验证Cookie。如果Passport Cookie不可用,用户将被重定向到Passport登录页面。用户在登录页面上提供凭据,如果验证通过,身份验证Cookie将存储在客户端机器上,然后重定向到请求的页面。

使用Passport身份验证的优点包括:

  • 不需要自己处理认证机制,Passport SSI为处理。
  • 可以使用单一登录凭据访问多个站点。用户不需要为每个站点记住不同的凭据。

基于角色的安全性

在上述问题中已经讨论了认证,但另一个不同但相关的概念是授权。授权是授予已认证用户对资源的权限的过程。

“基于角色的安全性是一种用来在组织内基于用户角色实现授权的技术。这是一种更细粒度的方法,通过用户角色授予或撤销对资源的权限。”

在配置文件中授予或撤销权限的一个示例是:

<authorization> <allow roles="MyDomain1\Administrators" /> <deny users="*" /> </authorization>

ASP.NET中的不同安全控件

ASP.NET提供了几种安全控件,这些实际上是Web服务器控件。可以在Visual Studio工具箱中找到它们。

  • 登录控件:在几乎所有应用程序中,都需要在典型的登录页面上获取用户凭据。登录控件提供了相同的标准功能,并减少了从头开始构建它的工作量。
  • 登录名控件:用户成功登录应用程序后,通常会在页面的右上角或其他位置显示他/她的用户名。现在,这个功能由登录名控件提供。
  • 登录视图控件:登录视图控件为不同的用户显示不同的视图。使用AnonymousTemplate和LoggedInTemplate,可以向不同的用户展示不同的信息。
  • 登录状态控件:登录状态控件表示用户是否已认证。对于未认证的用户,它显示登录页面的链接。对于已认证的用户,它显示注销链接。
  • 登录恢复控件:密码恢复是另一个通过登录恢复控件简化的重要功能。它向注册用户的电子邮件发送登录凭据。

代码访问安全性(CAS)

在上述ASP.NET安全性相关的面试问题中,讨论了基于用户角色限制对资源访问的基于角色的安全性。CAS(代码访问安全性)是一个完全不同的概念。它是.NET CLR的安全系统,通过应用安全策略来限制代码执行不需要的任务。使用CAS(代码访问安全性),可以限制代码可以做什么,以及什么代码可以调用代码。

根据文档,代码访问安全性的关键功能包括(直接来自MSDN):

  • 定义权限和权限集,代表访问各种系统资源的权利。
  • 使代码能够要求其调用者具有特定权限。
  • 使代码能够要求其调用者拥有数字签名,从而只允许来自特定组织或站点的调用者调用受保护的代码。
  • 通过比较调用堆栈上每个调用者的授予权限与调用者必须具有的权限,在运行时强制执行对代码的限制。

如何启用/禁用CAS

代码访问安全性工具(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" />
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485