我需要能够确定我的ASP.net MVC 3应用程序中的用户是否是授权(未经过身份验证)。检查用户是否被授权
我有一个使用Windows身份验证来验证用户的Intranet应用程序。在“allowedUsers”组中的用户才允许访问该网站,这是强制执行与AuthorizeAttribute
像这样:
[Authorize(Roles="allowedUsers")]
public abstract class BaseController : Controller
可正常工作和任何用户不是在组没有提供对站点的访问。到现在为止还挺好。
但是,我现在有一个问题,在用户进行身份验证但未经授权的情况下。请允许我解释:
在我的BaseController
中,我重写了Initialize
方法。在这里,我设置了我的域服务,它具有它从控制器所需的任何依赖项,其中之一是User.Identity
对象。
Service.Initialize(User.Identity);
在我的服务中,我使用Identity.Name
从我的数据库中查找用户详细信息。我的服务的设计假设是,如果用户已经到了这里,他们必须是授权用户,所以如果没有记录匹配,我假设他们是一个新的(但授权的)用户,并使用提供的Identity.Name
准备新的用户记录让他们稍后输入其他细节。
问题出现在用户通过身份验证但未获得授权的情况下;在这种情况下,用户被拒绝访问该页面,但控制器仍然在幕后实例化并且服务被初始化。该服务永远不会在数据库中找到匹配项(因为用户不应该有权访问)并创建新的用户记录。这给我留下了一些不应该访问的用户记录(只填写Identity.Name
)。
我的第一个(天真的)尝试解决这个问题的方法是检查我的服务中的Identity.IsAuthenticated
属性,但是,经过大量研究,我已经了解了身份验证和授权之间的区别,并了解为什么这样做不够充分,因为用户可能被认证但未被授权。
所以我基本上寻找的是类似于User.IsAuthenticated
但是对于授权E.G. User.IsAuthorised
。我的想法是,我会检查我的控制器,如果用户没有授权,我不会初始化服务。
有没有什么方法可以确定?