我正在尝试在我的WebApi控制器中实现Authorize
属性。我已经找到了有关如何实现Authorize
的资源,甚至我需要在实现授权时设置线程和 HttpContext 主体。但是我找不到如何/在哪里编写授权逻辑的示例。
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
,这是我设置身份验证上下文的方式吗?
你需要继承像这样的AuthorizeAttribute
public class MyAuthorizationProvider : AuthorizeAttribute
{
//Write your validation logic here.
}
并使用此覆盖授权属性,例如
public class MyController : ApiController
{
[Route("")]
[MyAuthorizationProvider]
public async Task<IHttpActionResult> Get() {}
}
当你继承AuthorizeAttribute
时,它将为您提供一些覆盖方法,以更好的方式实现您的逻辑,也使用它。有关更多详细信息,请查看此答案。