是否可以在 ASP.NET Core 应用程序中“禁用”身份验证而不更改其逻辑?
我有一个 .net 网站,它使用外部身份服务器应用程序进行身份验证。
无论如何,我希望能够在开发时模拟身份验证(ASPNETCORE_ENVIRONMENT = Development),公开对所有操作的访问,忽略授权属性。
是否可以仅模拟服务集合中的某些服务来做到这一点?
更新到 net core 3.1 时,mvcAllowAnonymousFilter
不再为我们工作了。我们发现有条件地添加自定义IAuthorizationHander
是有条件绕过身份验证的最简单方法。
eg.
/// <summary>
/// This authorisation handler will bypass all requirements
/// </summary>
public class AllowAnonymous : IAuthorizationHandler
{
public Task HandleAsync(AuthorizationHandlerContext context)
{
foreach (IAuthorizationRequirement requirement in context.PendingRequirements.ToList())
context.Succeed(requirement); //Simply pass all requirements
return Task.CompletedTask;
}
}
然后有条件地注册这个处理程序Startup.ConfigureServices
.
private readonly IWebHostEnvironment _env;
public Startup(IWebHostEnvironment env)
{
_env = env;
}
public void ConfigureServices(IServiceCollection services)
{
{...}
//Allows auth to be bypassed
if (_env.IsDevelopment())
services.AddSingleton<IAuthorizationHandler, AllowAnonymous>();
}
Note AddAuthentication
and AddAuthorization
服务仍然按照产品代码注册和配置(这很好)。
为了允许我们的单元测试绕过身份验证,我们添加了一个新的匿名测试库,其中包含一个启动类,该启动类无条件地添加了这一行。又好又简单!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)