- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我对 ASP.NET Core 2 中的身份验证有疑问:调用 app.UseAuthentication() 到底是为了什么?
这是我可以实现自定义身份验证逻辑的基本先决条件吗?我已经看过 UseAuthentication 的实现了以及实际的中间件AuthenticationMiddleware ,但老实说,我不明白那实际上在做什么以及为什么有必要这样做。
换句话说:
如果我不调用 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/
我对 ASP.NET Core 2 中的身份验证有疑问:调用 app.UseAuthentication() 到底是为了什么? 这是我可以实现自定义身份验证逻辑的基本先决条件吗?我已经看过 UseAu
如标题所述,我想在 .NET Core 2.1 中实现某种授权,但我无法按照他们的教程进行操作。我已经设置了 Startup.cs 文件 public void ConfigureServices(I
根据documentation ,中间件的顺序应该是这样的: app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.
我有一个非常奇怪的问题,我花了一整天的时间进行调试,但离解决还差得很远。我正在将我的应用程序从 ASP.NET Core 1.x 升级到 2.1。作为这样做的一部分,我必须重新连接身份验证和授权机制。
我是一名优秀的程序员,十分优秀!