C# 如何在Identity Core中禁用外部登录?

C# 如何在Identity Core中禁用外部登录?,c#,asp.net-core,asp.net-identity,C#,Asp.net Core,Asp.net Identity,我正在将简化的身份验证过程集成到asp.net core 2.1应用程序中,在该应用程序中,用户默认通过UI登录,但也可以获取令牌并调用一些安全api端点来检索报告所需的一些数据 我面临的问题是,在默认配置下,一切都正常,但添加令牌配置会引发一些奇怪的错误 如果我没有添加AddCookie(“Identity.External”),调用/Identity/Account/Login上的onGet方法会引发异常 InvalidOperationException:没有为方案“Identity.Ex

我正在将简化的身份验证过程集成到asp.net core 2.1应用程序中,在该应用程序中,用户默认通过UI登录,但也可以获取令牌并调用一些安全api端点来检索报告所需的一些数据

我面临的问题是,在默认配置下,一切都正常,但添加令牌配置会引发一些奇怪的错误

如果我没有添加
AddCookie(“Identity.External”)
,调用
/Identity/Account/Login
上的onGet方法会引发异常

InvalidOperationException:没有为方案“Identity.External”注册注销身份验证处理程序。注册的注销方案为:Identity.Application。您是否忘记调用AddAuthentication().AddCookies(“Identity.External”,…)

如果我没有指定
options.DefaultScheme=“Identity.Application”用户未成功登录

如果我不添加
.AddCookie(“Identity.External”)
.AddCookie(“Identity.TwoFactorUserId”)
则注销过程会引发与上述相同的异常

对于登录过程,只需删除行
await-HttpContext.SignOutAsync(IdentityConstants.ExternalScheme),即可纠正这一问题。如果我不使用外部方案,我就不需要注销它们,对吗

这就引出了我的问题:如何在Identity Core中禁用外部登录和多因素身份验证,以便我不必首先添加这些cookie?此外,为什么我必须指定一个名为“Identity.Application”的cookie,这在默认配置中不是这样的?我很确定这只是我没有完全理解手头的问题的另一个问题,所以我非常感谢对此的任何澄清

这是我在Startup.cs中的身份配置,我还用自定义的IdentityUser类构建了完整的身份UI

var jwtAppSettingOptions = Configuration.GetSection(nameof(JwtIssuerOptions));

services.Configure<JwtIssuerOptions>(options =>
{
    options.Issuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)];
    options.Audience = jwtAppSettingOptions[nameof(JwtIssuerOptions.Audience)];
    options.SigningCredentials = new SigningCredentials(_signingKey, SecurityAlgorithms.HmacSha256);
});

var tokenValidationParameters = new TokenValidationParameters
{
    /*...*/     
};

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Identity.Application";
})
//.AddCookie("Identity.External")
//.AddCookie("Identity.TwoFactorUserId")
.AddCookie("Identity.Application", opt =>
{
    opt.SlidingExpiration = true;
})

.AddJwtBearer(options =>
{
    options.ClaimsIssuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)];
    options.TokenValidationParameters = tokenValidationParameters;
    options.SaveToken = true;
});

var builder = services.AddIdentityCore<AppUser>(o =>
{
    //removed
});
builder = new IdentityBuilder(builder.UserType, typeof(IdentityRole), builder.Services);
builder.AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
var jwtappsetingoptions=Configuration.GetSection(名称(jwtissueoptions));
配置(选项=>
{
options.Issuer=jwtappsetingoptions[名称(JwtIssuerOptions.Issuer)];
options.audition=jwtappsetingoptions[名称(jwtissueoptions.audition)];
options.SigningCredentials=新的SigningCredentials(_signingKey,SecurityAlgorithms.HmacSha256);
});
var tokenValidationParameters=新的tokenValidationParameters
{
/*...*/     
};
services.AddAuthentication(选项=>
{
options.DefaultScheme=“Identity.Application”;
})
//.AddCookie(“Identity.External”)
//.AddCookie(“Identity.TwoFactorUserId”)
.AddCookie(“Identity.Application”,opt=>
{
opt.SlidingExpiration=true;
})
.AddJwtBearer(选项=>
{
options.claimssuer=jwtappsetingoptions[名称(jwtissueoptions.Issuer)];
options.TokenValidationParameters=TokenValidationParameters;
options.SaveToken=true;
});
var builder=services.AddIdentityCore(o=>
{
//除去
});
builder=newidentitybuilder(builder.UserType,typeof(IdentityRole),builder.Services);
builder.AddEntityFrameworkStores().AddDefaultTokenProviders();