Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 即使未经授权,Asp.NETMVC4用户也是经过身份验证的_Asp.net Mvc_Authentication_Authorization - Fatal编程技术网

Asp.net mvc 即使未经授权,Asp.NETMVC4用户也是经过身份验证的

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

我在我的第一个MVC项目中工作,我在身份验证方面遇到了问题。 我有一个登录页面,可以通过我的active directory正确验证用户。但是,即使经过身份验证,也不是所有用户都有权访问系统,因此我使用web.config中的一个部分来检查用户是否具有权限。比如:

<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来解决此问题。谢谢