gpt4 book ai didi

c# - 身份验证处理程序不阻止请求

转载 作者:行者123 更新时间:2023-12-03 08:10:08 25 4
gpt4 key购买 nike

我已经向我的 API 添加了身份验证,可以使用两种不同的身份验证方案进行身份验证。根据 Auth header 的格式,我使用 ForwardDefaultSelector 将身份验证请求转发到相应的身份验证处理程序。

 services.AddAuthentication(opt =>
{
opt.DefaultScheme = "ForwardScheme";
opt.DefaultChallengeScheme = "ForwardScheme";
})
.AddPolicyScheme("ForwardScheme", "ForwardScheme", options =>
options.ForwardDefaultSelector = context =>
context.Request.IsSchemeA()
? "SchemeA"
: "SchemeB")
.AddSchemeA()
.AddSchemeB();

添加方案:

public static AuthenticationBuilder AddSchemeA(this AuthenticationBuilder builder)
{
builder.AddScheme<AuthenticationSchemeOptions, SchemeAHandler>(
"SchemeA", null);
return builder;
}

转发似乎工作正常,我可以看到请求根据 header 值发送到正确的身份验证处理程序。

问题是即使身份验证失败,API 调用也不会被阻止,我仍然收到 200 响应。

在 AuthHandler 中我只是返回这个:

 return AuthenticateResult.Fail("Authentication Failed");

知道我在这里缺少什么吗?谢谢。

最佳答案

如果您为应用程序注册身份验证方案并将身份验证中间件添加到 ASP.NET Core 请求管道,那么您基本上是在要求 ASP.NET Core 框架尝试使用指定的身份验证对任何传入请求进行身份验证方案。这本身不会将响应状态代码从 200 更改为 401。

为了让您在匿名请求到达您的服务器时获得 401 响应,您需要对传入请求提出所谓的身份验证质询

最简单的方法基本上是要求对请求主体进行身份验证才能执行特定的操作方法。为此,您只需使用 [Authorize] 属性来修饰操作方法。通过这种方式,您可以为操作方法设置执行策略,仅当请求主体经过身份验证时才允许该方法执行。

关于c# - 身份验证处理程序不阻止请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71072448/

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