gpt4 book ai didi

c# - 自定义 AuthenticationHandler 在 Asp.Net Core 3 中不起作用

转载 作者:行者123 更新时间:2023-12-03 18:34:31 24 4
gpt4 key购买 nike

我不确定在 Asp.Net Core 2.2 中是否会发生同样的情况,但是当我升级到最新的 Asp.net Core 3 版本时会发生这种情况。所以,我的问题是我创建了一个自定义的 AuthenticationHandler,如下所示:

public class PlatformAuthenticationHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
public PlatformAuthenticationHandler(
IOptionsMonitor<AuthenticationSchemeOptions> options,
ILoggerFactory logger,
UrlEncoder encoder,
ISystemClock clock)
: base(options, logger, encoder, clock)
{
}

protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
var sessionTokenStr = Request.Headers[Headers.SessionToken];
var userTokenStr = Request.Headers[Headers.UserToken];

if (string.IsNullOrEmpty(sessionTokenStr) ||
Guid.TryParse(sessionTokenStr, out var sessionToken))
{
return AuthenticateResult.Fail("Session token should be present and in GUID format");
}

if (string.IsNullOrEmpty(userTokenStr) ||
Guid.TryParse(userTokenStr, out var userToken))
{
return AuthenticateResult.Fail("User token should be present and in GUID format");
}
//... and so on...
}
}

在我的启动类(class)中,我注册了如下身份验证:
collection.AddAuthentication(PlatformScheme.HeaderScheme)
.AddScheme<AuthenticationSchemeOptions, PlatformAuthenticationHandler>(PlatformScheme.HeaderScheme, null);
collection.AddAuthorization();

以及在配置方法中:
public void Configure(
IApplicationBuilder app)
{
app.UseDeveloperExceptionPage();
app.UseMiddleware<ErrorHandlerMiddleware>();
app.UseCors();
//app.UseMiddleware<SessionBuilderMiddleware>();
app.UseCoreFoundation();//custom library
app.UseStaticFiles();
app.UseStatusCodePages();
app.UseAuthentication();
app.UseAuthorization();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/PlatformApi/swagger.json", "Platform Api");
c.RoutePrefix = "";
});
}

我有一个简单的 Action ,如下所示:
[HttpGet(UrlPath + "claims")]
[Authorize]
public Task<IDictionary<string, object>> GetClaims(bool refresh)
{
return _authenticationProvider.GetClaimsAsync(refresh);
}

在调试时,我可以看到我返回 AuthenticateResult.Fail("Session token should be present and in GUID format");,下一步它进入 GetClaims 方法。为什么会发生这种情况? - 如果我从处理程序返回失败,那不是应该阻止我之后访问该方法吗?

最佳答案

你的中间件顺序有问题

app.UseRouting();
app.UseCors();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints => {
endpoints.MapControllers();
});
UseAuthentication()UseAuthorization() 应该放在 UseRouting() 之后和 UseEndpoints() 之前,如 docs 中所述。

关于c# - 自定义 AuthenticationHandler 在 Asp.Net Core 3 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58363002/

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