gpt4 book ai didi

c# - 为什么 Asp.Net Core 身份验证方案是强制性的

转载 作者:行者123 更新时间:2023-11-30 12:22:44 31 4
gpt4 key购买 nike

我对 Asp.Net Core 中的身份验证方案似乎是强制性这一事实感到非常沮丧。我的目标是构建一个 API,我不想了解有关客户端的任何信息。我已经构建了自定义身份验证和授权,效果很好。我没有使用身份或 cookie。但是,如果没有有效的身份验证方案,我不能返回 403 Forbid 结果,否则我会得到以下异常...

System.InvalidOperationException: No authentication handler is configured to handle the scheme: Automatic

我的问题是,我能否将 MVC 配置为不使用身份验证方案或创建身份验证方案而不依赖于登录路径或任何路径?

最佳答案

在仔细研究了 Asp.net Core 安全源代码之后,我设法创建了一个自定义身份验证处理程序。为此,您需要实现 3 个类。

第一个类实现了一个抽象的 AuthenticationOptions。

public class AwesomeAuthenticationOptions : AuthenticationOptions {
public AwesomeAuthenticationOptions() {
AuthenticationScheme = "AwesomeAuthentication";
AutomaticAuthenticate = false;
}
}

第二个类实现了一个抽象的 AuthenticationHandler。

public class AwesomeAuthentication : AuthenticationHandler<AwesomeAuthenticationOptions>
{
protected override async Task<AuthenticateResult> 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<AwesomeAuthenticationOptions>
{
public AwesomeAuthenticationMiddleware(RequestDelegate next,
IOptions<AwesomeAuthenticationOptions> options,
ILoggerFactory loggerFactory,
UrlEncoder urlEncoder) : base(next, options, loggerFactory, urlEncoder) {

}

protected override AuthenticationHandler<AwesomeAuthenticationOptions> CreateHandler()
{
return new AwesomeAuthentication();
}
}

最后,您在 Startup.cs Configure 方法中使用中间件组件。

app.UseMiddleware<AwesomeAuthenticationMiddleware>();

现在您可以构建自己的身份验证方案。

关于c# - 为什么 Asp.Net Core 身份验证方案是强制性的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39806052/

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