在对.NET Core进行2.0更改后,我无法找到有关此特定问题的信息。
我有这样的cookie授权:
services.AddAuthentication("ExampleCookieAuthenticationScheme")
.AddCookie("ExampleCookieAuthenticationScheme", options => {
options.AccessDeniedPath = "/Account/Forbidden/";
options.LoginPath = "/Account/Login/";
});
对于另一部分(我的控制器,我想根据简单的标题进行简单授权)。 在我发现的示例中,要么我无法获取标题,要么它们仅用于facebook,google,cookies等。
如何在.Net core 2.0中添加执行简单标头检查的授权?
答案 0 :(得分:6)
可以使用自定义中间件执行简单的授权检查。但是,如果需要为选定的控制器或操作方法应用自定义中间件,则可以使用中间件过滤器。
中间件及其应用构建器扩展程序:
public class SimpleHeaderAuthorizationMiddleware
{
private readonly RequestDelegate _next;
public SimpleHeaderAuthorizationMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context){
string authHeader = context.Request.Headers["Authorization"];
if(!string.IsNullOrEmpty(authHeader))
{
//TODO
//extract credentials from authHeader and do some sort or validation
bool isHeaderValid = ValidateCredentials();
if(isHeaderValid){
await _next.Invoke(context);
return;
}
}
//Reject request if there is no authorization header or if it is not valid
context.Response.StatusCode = 401;
await context.Response.WriteAsync("Unauthorized");
}
}
public static class SimpleHeaderAuthorizationMiddlewareExtension
{
public static IApplicationBuilder UseSimpleHeaderAuthorization(this IApplicationBuilder app)
{
if (app == null)
{
throw new ArgumentNullException(nameof(app));
}
return app.UseMiddleware<SimpleHeaderAuthorizationMiddleware>();
}
}
为了将中间件用作过滤器,您需要创建一个带有Configure
方法的类型,该方法指定您要使用的中间件管道。
public class SimpleHeaderAuthorizationPipeline
{
public void Configure(IApplicationBuilder applicationBuilder){
applicationBuilder.UseSimpleHeaderAuthorization();
}
}
现在您可以在特定的控制器或操作方法中使用上述类型,如下所示:
[MiddlewareFilter(typeof(SimpleHeaderAuthorizationPipeline))]
public class ValuesController : Controller
{
}