在开发,登台和生产中,我的控制器使用 [Authorize] 属性来确保只有授权用户才能访问这些方法。显然,这需要连接到身份验证服务。
但是,我和我的团队经常在火车和飞机上旅行,那里的WIFI服务不可靠。删除这些属性以在飞机旅行中进行开发,然后再将它们重新投入生产并不是可行的解决方案。我希望有一个配置Web服务的选项,以便在尝试进行身份验证时不执行任何操作,以便我们仍然可以进行长途旅行。我已经看到了一些自定义身份验证方案,但是有没有简单的方法来简单地“不做任何事情”,或者是不做任何事的简单自定义身份验证方案的简单示例?
答案 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);