我需要能够确定用户是否在我的 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
但授权 EG的东西User.IsAuthorised
。这个想法是我将在我的控制器中检查这一点,如果用户未获得授权,我将不会初始化服务。
有没有办法确定这一点?