Asp.net mvc 即使未经授权,Asp.NETMVC4用户也是经过身份验证的
我在我的第一个MVC项目中工作,我在身份验证方面遇到了问题。 我有一个登录页面,可以通过我的active directory正确验证用户。但是,即使经过身份验证,也不是所有用户都有权访问系统,因此我使用web.config中的一个部分来检查用户是否具有权限。比如:Asp.net mvc 即使未经授权,Asp.NETMVC4用户也是经过身份验证的,asp.net-mvc,authentication,authorization,Asp.net Mvc,Authentication,Authorization,我在我的第一个MVC项目中工作,我在身份验证方面遇到了问题。 我有一个登录页面,可以通过我的active directory正确验证用户。但是,即使经过身份验证,也不是所有用户都有权访问系统,因此我使用web.config中的一个部分来检查用户是否具有权限。比如: <authorization> <allow users="john,mary,paul,bill,jane,anna" /> <deny users="*" /> </autho
<authorization>
<allow users="john,mary,paul,bill,jane,anna" />
<deny users="*" />
</authorization>
@if (User.Identity.IsAuthenticated && User.Identity.IsAuthorized)
{
@Html.Partial("_Menu");
}
<authorization>
<allow users="*" allow role="yourdomain\yourgroup" />
<deny users="*" />
</authorization>
所以。。。我是如何做到的?身份验证和授权是两个不同的概念。身份验证意味着您知道此人是谁。授权意味着他们有特定的权限
如果您想检查他们是否有权执行某些操作,并为他们提供执行该操作的按钮或链接(或访问某些数据,无论是什么),那么您必须使用其他方式检查他们是否具有权限。有关您的设置的更多细节将有助于更好地回答问题。要进行身份验证,请检查您的web.config,如果您有此标记:
<authentication mode="Forms">//It cannot be "None"
<forms loginUrl="~/MyLoginURL" timeout="2880" />
</authentication>
System.Web.Mvc中有一个authorized属性,可用于您的操作或控制器,如:
[Authorize]
public ActionResult Index()
{ ... }
或
此Authorized属性将检查当前用户是否已授权。您只需继承authorized属性并覆盖authorization和AuthorizeCore即可创建自己的属性一旦您成功登录(
FormsAuthentication.SetAuthCookie
),您的用户将获得身份验证,直到您没有显式注销(FormsAuthentication.SignOut
)这是正确的行为,因为认证和授权是两件不同的事情
我猜您只想向通过AD认证的用户显示菜单,在这种情况下,您可以通过以下方式限制您的资源:
@if (User.Identity.IsAuthenticated)
{
@Html.Partial("_Menu");
}
如果经过授权,用户也会经过身份验证,因此无需进行双重检查。然后可以使用[Authorize]
属性,该属性依赖于User.Identity.IsAuthorized
当您可以使用角色对用户进行分组时,授权非常方便。检查您的成年人是否属于任何群体,如果是这样,您可以采取以下措施:
<authorization>
<allow users="john,mary,paul,bill,jane,anna" />
<deny users="*" />
</authorization>
@if (User.Identity.IsAuthenticated && User.Identity.IsAuthorized)
{
@Html.Partial("_Menu");
}
<authorization>
<allow users="*" allow role="yourdomain\yourgroup" />
<deny users="*" />
</authorization>
不幸的是,MembershipProvider
模式没有注意到差异。@JeremyHolovacs-为什么要这样做?成员资格只关心身份验证。您可以使用角色、属性或web.config进行授权。User.Identity.IsAuthorized不会exists@robsonrosa没错。如果授权失败,它会重新定向,读起来很尴尬。@robsonrosa将用户分配到角色并使用User.IsInRole
函数。耶!我用过。但我如何检查用户是否被授权?FormsAuthentication.IsAuthorized()或其他…@robsonrosa我已经用一个属性更新了我的答案,该属性可以为您检查。谢谢,但我会手动测试。NickLarsen appers建议使用User.IsInRole来解决此问题。谢谢