Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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
C# AllowAnonymous vs OverrideAuthorizeAttribute_C#_Authorization_Asp.net Web Api2 - Fatal编程技术网

C# AllowAnonymous vs OverrideAuthorizeAttribute

C# AllowAnonymous vs OverrideAuthorizeAttribute,c#,authorization,asp.net-web-api2,C#,Authorization,Asp.net Web Api2,AllowAnonymous和OverrideAuthorizeAttribute的用法有什么区别。 是否相同?OverrideAuthorizeAttribute描述了一个属性,该属性根据任何开发人员的实现覆盖了AuthorizeAttribute的当前功能(在任何版本的.NET Framework中都没有提供该属性) AllowAnonymousAttribute由.NET提供,以.NET团队定义的方式覆盖AuthorizeAttribute功能。(它是在.NET Framework中提供的

AllowAnonymous和OverrideAuthorizeAttribute的用法有什么区别。
是否相同?

OverrideAuthorizeAttribute
描述了一个属性,该属性根据任何开发人员的实现覆盖了
AuthorizeAttribute
的当前功能(在任何版本的.NET Framework中都没有提供该属性)

AllowAnonymousAttribute
由.NET提供,以.NET团队定义的方式覆盖
AuthorizeAttribute
功能。(它是在.NET Framework中提供的。

两者不同,但在某些情况下可能具有相同的效果。 身份验证是验证用户的过程。覆盖在作用域的下一个最高级别禁用覆盖类型的过滤器。授权是确定用户是否应该访问特定资源的过程。
[AllowAnonymous]
属性禁用身份验证,以便web api在对使用此属性修饰的控制器或使用此属性修饰的特定操作方法的访问请求期间跳过身份验证和授权。从链接

中列出的文章考虑下面的控制器类
 [Authorize]
 public class ValuesController : ApiController
 {
     [AllowAnonymous]
     public HttpResponseMessage Get() { ... }
     public HttpResponseMessage Post() { ... }
 }
在上面的示例中,授权用户(任何已识别的用户)可以访问post-action方法,但Get-action方法不需要授权

授权将对资源的访问限制为属于已被授予访问权限的用户或用户角色的用户。
[OverrideAuthorization]
属性禁用
[Authorization]
步骤,以便任何经过身份验证的用户都可以访问操作方法。这可以从本文的以下示例中看出

考虑以下控制器类:

 [Authorize(Roles="Admins")]
 public class SomeController : ApiController {
     [OverrideAuthorization]
     [Authorize(Roles="Users")]
     public IEnumerable<SomeModel> Get() {...}
     public SomeModel Post() {...}
  }
[Authorize(Roles=“Admins”)]
公共类控制器:ApiController{
[覆盖授权]
[授权(角色=“用户”)]
公共IEnumerable Get(){…}
公共模型Post(){…}
}

在上面的示例中,用户必须经过身份验证,并且具有访问控制器定义的任何操作方法的原则。然而,虽然只有具有“管理员”角色的principles才能访问Post action方法,但具有Users角色的任何经过身份验证的用户都可以访问Get action方法。

如果像我一样,您正在努力使
OverrideAuthorization
属性正常工作,并且需要自己实现,请参阅本相关SO帖子中的顶部答案。