【发布时间】:2019-05-04 23:50:35
【问题描述】:
我正在尝试使用 ASP.NET Core 提供一个简单的 API,并且我想根据请求的授权标头限制对某些端点的访问。
在 ASP.NET MVC5 中,我可以通过继承 AuthorizationFilterAttribute 并覆盖检查方法来做到这一点,如下所示:
public class BasicAuthorizationAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
try
{
if (actionContext.Request.Headers.Authorization == null)
{
actionContext.Response = actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
return;
}
var authorizationToken = Encoding.UTF8.GetString(Convert.FromBase64String(actionContext.Request.Headers.Authorization.Parameter)).Split(':');
var username = authorizationToken[0];
var password = authorizationToken[1];
if (SecurityHelper.Login(username, password))
{
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), null);
actionContext.RequestContext.Principal = Thread.CurrentPrincipal;
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
return;
}
} catch
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
return;
}
}
}
但从表面上看,Core 使用了一个完全不同的授权系统,这似乎需要更多的代码,而且该设置似乎并不适合与标头检查一起使用。对于这种情况,整个策略系统似乎过于复杂。那是我应该在这种情况下使用的吗?还是有一些内置的替代方法来检查基本身份验证?
谢谢!
【问题讨论】:
-
您是否尝试过实现AuthorizationHandler,您可以在其中通过
AuthorizationHandlerContext访问所有相关信息? -
政策似乎相当复杂。如何将 auth 标头转换为声明,以便之后可以在
HandleRequirementAsync方法中检查它?我需要为此使用声明吗?
标签: c# .net asp.net-core authorization