C#授权属性逻辑

时间:2017-02-01 02:58:06

标签: c# asp.net-mvc asp.net-web-api

我正在尝试在WebApi控制器中实现Authorize属性。我找到了有关如何实现Authorize的资源,甚至在实现授权时我需要设置Thread和HttpContext Principal。但我找不到编写授权逻辑的方式/位置示例。

public class MyController : ApiController
{
    [Route("")]
    [Authorize]
    public async Task<IHttpActionResult> Get() {}
}
public class MyAuthorizationProvider
{
    public void AuthorizeIGuess()
    {
        string authHeader = HttpContext.Request.Headers.GetValues("Authorization").FirstOrDefault();

        // do stuff with auth header
        // create principal

        HttpContext.Current.User = ...;
        Thread.CurrentPrincipal = ...;
    }
}

如何设置MyAuthorizationProvider以便将其用于Authorize,这是我如何设置我的身份验证上下文?

1 个答案:

答案 0 :(得分:1)

您需要继承AuthorizeAttribute之类的

public class MyAuthorizationProvider : AuthorizeAttribute  
{
  //Write your validation logic here. 
}

并使用此覆盖授权属性,如

    public class MyController : ApiController
  {
    [Route("")]
    [MyAuthorizationProvider]
    public async Task<IHttpActionResult> Get() {}
  }

当你继承AuthorizeAttribute时,它会为你提供一些覆盖方法来更好地实现你的逻辑,也可以使用它。有关详情check this answer