如何创建在.Net Core中不执行任何操作的身份验证方案?

时间:2019-04-09 18:04:50

标签: .net-core asp.net-authentication

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

但是,我和我的团队经常在火车和飞机上旅行,那里的WIFI服务不可靠。删除这些属性以在飞机旅行中进行开发,然后再将它们重新投入生产并不是可行的解决方案。我希望有一个配置Web服务的选项,以便在尝试进行身份验证时不执行任何操作,以便我们仍然可以进行长途旅行。我已经看到了一些自定义身份验证方案,但是有没有简单的方法来简单地“不做任何事情”,或者是不做任何事的简单自定义身份验证方案的简单示例?

1 个答案:

答案 0 :(得分:0)

好的,从一些更复杂的示例中得出答案:

    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);