gpt4 book ai didi

c# - 'UseAuthentication()' 到底是做什么用的?

转载 作者:IT王子 更新时间:2023-10-29 04:27:55 31 4
gpt4 key购买 nike

我对 ASP.NET Core 2 中的身份验证有疑问:调用 app.UseAuthentication() 到底是为了什么?

这是我可以实现自定义身份验证逻辑的基本先决条件吗?我已经看过 UseAuthentication 的实现了以及实际的中间件AuthenticationMiddleware ,但老实说,我不明白那实际上在做什么以及为什么有必要这样做。

换句话说:

我需要调用 UseAuthentication() enter image description here

或者这是一个很好的选择,我仍然可以进行自定义身份验证? enter image description here

如果我不调用 UseAuthentication() 就没事,我仍然会对 AuthenticationMiddleware 感兴趣实际上是在做。因此,如果您知道这一点,如果您也能为我解释一下,我将不胜感激。

最佳答案

如果您编写自定义中间件(就像您在示例中所做的那样),则不需要调用 AddAuthentication,因为身份验证中间件不会知道您自己的中间件。

也就是说,您可能不想创建自己的中间件:您可能想创建一个新的身份验证处理程序,它可以很好地与 ASP.NET 身份验证框架配合使用(以便您使用 [Authorize] Controller 上的属性)。

要创建自定义身份验证,您必须创建一个继承自 AuthenticationHandler 的专用处理程序,并实现相关方法。您可以在 github 上查看基本身份验证示例:https://github.com/blowdart/idunno.Authentication ,但这里有一个简单的示例来展示自定义处理程序的要点。

public class BasicAuthenticationOptions : AuthenticationSchemeOptions
{
public BasicAuthenticationOptions()
{
}
}

internal class BasicAuthenticationHandler : AuthenticationHandler<BasicAuthenticationOptions>
{
private const string _Scheme = "MyScheme";

public BasicAuthenticationHandler(
IOptionsMonitor<BasicAuthenticationOptions> options,
ILoggerFactory logger,
UrlEncoder encoder,
ISystemClock clock) : base(options, logger, encoder, clock)
{
}

protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
string authorizationHeader = Request.Headers["Custom-Auth-Handler"];

// create a ClaimsPrincipal from your header
var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, "My Name")
};

var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims, Scheme.Name));
var ticket = new AuthenticationTicket(claimsPrincipal,
new AuthenticationProperties { IsPersistent = false },
Scheme.Name
);

return AuthenticateResult.Success(ticket);
}
}

然后您可以在 Startup.cs 中注册您的新方案:

public void ConfigureServices(IServiceCollection services)
{
services
.AddAuthentication(BasicAuthenticationDefaults.AuthenticationScheme)
.AddScheme<BasicAuthenticationOptions, BasicAuthenticationHandler>("MyScheme", options => { /* configure options */ })
}

关于c# - 'UseAuthentication()' 到底是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48836688/

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