如何创建一个在 .Net Core 中什么都不做的身份验证方案?

How do you create an Authentication scheme that does nothing in .Net Core?

在开发、暂存和生产中,我的控制器使用 [Authorize] 属性来确保只有授权用户才能访问这些方法。这显然需要连接到身份验证服务。

但是,我和我的团队经常乘坐火车和飞机,那里的 WIFI 服务不可靠。在飞机旅行中删除这些属性以进行开发,然后将它们放回生产中并不是一个可行的解决方案。我希望有一个选项来配置 Web 服务,以便它在尝试进行身份验证时不执行任何操作,这样我们仍然可以在长途旅行中进行开发。我见过一些自定义身份验证方案,但是否有简单的方法 'do nothing' 或什么都不做的简单自定义身份验证方案的快速示例?

好的,通过一些更复杂的例子来解决这个问题:

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

        protected override Task<AuthenticateResult> HandleAuthenticateAsync()
        {
            // Create an empty claims identity and pass it off as a valid user.  This is only valid in a local build environment to bypass the
            // web-based authentication service.
            var principal = new ClaimsPrincipal(new ClaimsIdentity(Array.Empty<Claim>(), this.Scheme.Name));
            return Task.FromResult(AuthenticateResult.Success(new AuthenticationTicket(principal, this.Scheme.Name)));
        }
    }

并且在 startup.cs

    serviceCollection.AddAuthentication(options => options.DefaultAuthenticateScheme = "Local")
        .AddScheme<AuthenticationSchemeOptions, LocalAuthenticationHandler>("Local", null);