gpt4 book ai didi

c# - 如何在 .net core 2.0 中进行简单的 header 授权?

转载 作者:行者123 更新时间:2023-12-04 17:24:20 25 4
gpt4 key购买 nike

在 .NET Core 2.0 更改后,我一直无法找到有关此特定问题的信息。

我有这样的 cookie 授权:

services.AddAuthentication("ExampleCookieAuthenticationScheme")
.AddCookie("ExampleCookieAuthenticationScheme", options => {
options.AccessDeniedPath = "/Account/Forbidden/";
options.LoginPath = "/Account/Login/";
});

对于另一部分(我的 Controller ,我想简单地基于一个简单的标题进行授权。
在我发现的示例中,要么我无法获取标题,要么它们仅适用于 facebook、google、cookie 等。

如何在 .Net core 2.0 中添加执行简单 header 检查的授权?

最佳答案

可以使用自定义中间件执行简单的授权检查。但是如果需要为选定的 Controller 或操作方法应用自定义中间件,则可以使用中间件过滤器。

中间件及其应用程序构建器扩展:

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();
}
}

现在您可以在特定的 Controller 或操作方法中使用上述类型,如下所示:
[MiddlewareFilter(typeof(SimpleHeaderAuthorizationPipeline))]
public class ValuesController : Controller
{
}

关于c# - 如何在 .net core 2.0 中进行简单的 header 授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46744561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com