我正在尝试在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
,这是我如何设置我的身份验证上下文?
答案 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。