Security 请求之间的Authorize属性

Security 请求之间的Authorize属性,security,asp.net-web-api,authorization,Security,Asp.net Web Api,Authorization,描述如何使用[Authorize]属性将对控制器的访问和操作限制为经过身份验证或授权的用户 身份验证通过设置线程.CurrentPrincipal完成,然后允许访问受限控制器/操作,前提是用户处于任何所需角色 采用此方法时,是否需要为每个请求(例如,在消息处理程序中)设置Thread.CurrentPrincipal,或者Web API是否有某种方法在请求之间维护该主体?(据我所知,Web API是无状态的,没有会话,但我只是检查一下。) 此外,如果在会话之间未维护当前主体,[Authorize

描述如何使用
[Authorize]
属性将对控制器的访问和操作限制为经过身份验证或授权的用户

身份验证通过设置
线程.CurrentPrincipal
完成,然后允许访问受限控制器/操作,前提是用户处于任何所需角色

采用此方法时,是否需要为每个请求(例如,在消息处理程序中)设置
Thread.CurrentPrincipal
,或者Web API是否有某种方法在请求之间维护该主体?(据我所知,Web API是无状态的,没有会话,但我只是检查一下。)


此外,如果在会话之间未维护当前主体,
[Authorize]
属性与编写您自己的自定义访问控制方案相比有什么优势?

您是正确的
线程。由于服务器是无状态的,因此需要为消息处理程序中的每个请求设置CurrentPrincipal

authorize属性的一些好处

  • 允许在特定方法或整个控制器上轻松添加授权
  • 可以在单个操作上指定多个授权属性
  • 您可以使用
    [AllowAnonymousAttribute]
    禁用操作授权
  • 允许您对角色声明或用户声明进行授权
  • 提供有价值的覆盖以确定授权