为什么Asp.Net核心认证方案是强制性的
我非常沮丧的是,在Asp.Net Core中,身份validation方案似乎是强制性的。 我的目标是构建一个API,我不想知道客户端的任何信息。 我已经建立了自定义身份validation和授权,工作正常。 我没有使用身份或cookie。 但是,如果没有有效的身份validation方案,我将无法返回403 Forbid结果,否则会出现以下exception…
System.InvalidOperationException:没有配置身份validation处理程序来处理该方案:自动
我的问题是,我是否可以将MVC配置为不使用身份validation方案或创建身份validation方案而不依赖于登录路径或任何路径?
在仔细阅读Asp.net Core安全源代码后,我设法创建了一个自定义身份validation处理程序。 为此,您需要实现3个类。
第一个类实现了一个抽象的AuthenticationOptions。
public class AwesomeAuthenticationOptions : AuthenticationOptions { public AwesomeAuthenticationOptions() { AuthenticationScheme = "AwesomeAuthentication"; AutomaticAuthenticate = false; } }
第二个类实现了一个抽象的AuthenticationHandler。
public class AwesomeAuthentication : AuthenticationHandler { protected override async Task HandleAuthenticateAsync() { var prop = new AuthenticationProperties(); var ticket = new AuthenticationTicket(Context.User, prop, "AwesomeAuthentication"); //this is where you setup the ClaimsPrincipal //if auth fails, return AuthenticateResult.Fail("reason for failure"); return await Task.Run(() => AuthenticateResult.Success(ticket)); } }
第三个类实现了一个抽象的AuthenticationMiddleware。
public class AwesomeAuthenticationMiddleware : AuthenticationMiddleware { public AwesomeAuthenticationMiddleware(RequestDelegate next, IOptions options, ILoggerFactory loggerFactory, UrlEncoder urlEncoder) : base(next, options, loggerFactory, urlEncoder) { } protected override AuthenticationHandler CreateHandler() { return new AwesomeAuthentication(); } }
最后,使用Startup.cs Configure方法中的中间件组件。
app.UseMiddleware();
现在,您可以构建自己的身份validation方案。
- 我在哪里可以记录ASP.NET Core应用程序的启动/停止/错误事件?
- .NET Core – 尝试将存储库添加到我的API控制器,但是当我执行每个控制器方法时都会返回500错误
- 将文件从ASP.NET Core web api发布到另一个ASP.NET Core web api
- Asp.net核心 – 没有这样的表:AspNetUsers
- SignalR .NET核心camelCase JSON合同解析器
- 如何在移动应用程序上进行身份validation后在.NET Core服务器上登录用户
- 如何在ASP.NET MVC 6中继续使用ModelState和RedirectToAction?
- ASP.NET核心中的dependency injection
- ASP.NET 5:响应中的Access-Control-Allow-Origin