Asp.net core ASP.NET Core 3.1 web应用程序对使用不同身份验证类型的多个区域使用授权
我有一个ASP.NET Core 3.1应用程序,它遵循域驱动的体系结构,它有两个区域,一个用于管理,另一个用于客户(应用程序用户) 我想分别为每个区域启用身份验证和授权。例如,客户区域使用Identity 4,管理区域使用cookie base身份验证。但是应该使用单个数据库来完成,并且不应该使用角色库身份验证来分隔区域Asp.net core ASP.NET Core 3.1 web应用程序对使用不同身份验证类型的多个区域使用授权,asp.net-core,authentication,asp.net-core-mvc,authorization,Asp.net Core,Authentication,Asp.net Core Mvc,Authorization,我有一个ASP.NET Core 3.1应用程序,它遵循域驱动的体系结构,它有两个区域,一个用于管理,另一个用于客户(应用程序用户) 我想分别为每个区域启用身份验证和授权。例如,客户区域使用Identity 4,管理区域使用cookie base身份验证。但是应该使用单个数据库来完成,并且不应该使用角色库身份验证来分隔区域 遵循的最佳方法是什么。例如“多重身份验证方案”或任何其他方法。当涉及到管理员和客户登录时,您可以使用acr_值来实现它。Identity server可以根据acr\U值决定
遵循的最佳方法是什么。例如“多重身份验证方案”或任何其他方法。当涉及到管理员和客户登录时,您可以使用
acr_值来实现它。Identity server可以根据acr\U值
决定如何进行身份验证,例如,如果您以acr\U值
的形式提供了admin\U登录
,则Identity server将根据该身份验证用户(使用不同的身份提供程序或不同的数据库/表)
在重定向到identity server授权端点之前,应用程序需要知道用户是想以客户还是管理员身份登录。为了知道您必须在应用程序中实现不同的身份验证方案(一个用于管理员,一个用于客户)。一旦知道用户登录类型,就可以添加正确的acr\u值
。下面的代码没有经过测试,但它应该能让您了解如何实现它
services.AddAuthentication(options =>
{
options.DefaultScheme = "CustomerCookie";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("CustomerCookie", options =>
{
options.Cookie.Name = "CustomerCookie";
options.ForwardChallenge = "oidc";
})
.AddCookie("AdminCookie", options =>
{
options.Cookie.Name = "AdminCookie";
options.ForwardChallenge = "admin-oidc";
})
.AddOpenIdConnect("oidc", options =>
{
// Configure all other options needed.
options.SignInScheme = "CustomerCookie";
options.CallbackPath = "/signin-oidc-customer";
options.Events.OnRedirectToIdentityProvider = (context) =>
{
context.ProtocolMessage.SetParameter("acr_values", "customer_login");
return Task.FromResult(0);
};
})
.AddOpenIdConnect("admin-oidc", options =>
{
// Configure all other options needed.
options.SignInScheme = "AdminCookie";
options.CallbackPath = "/signin-oidc-admin";
options.Events.OnRedirectToIdentityProvider = (context) =>
{
context.ProtocolMessage.SetParameter("acr_values", "admin_login");
return Task.FromResult(0);
};
});
在identity server端,您可以根据acr\u值
完全控制要执行的操作,您可以使用外部提供程序进行管理
您可以使用来检索acr\u值
,并且可以实现,这样一旦经过身份验证,您就可以根据用户类型(管理员或客户)决定要包含哪些声明
这将是基本的想法,希望它有用。也许您可以使用授权。@mj1313谢谢您的回复,是的,每个区域都有自己的角色,但要求使用2个不同的登录名和不同的密码databases@Nayanajith您可以使用多功能应用系统来实现所需的解决方案。因此,管理员和客户将有一个单独的数据库。这两个人都不会访问其他数据。@Brettle感谢您的回复。不可能使用两个数据库,因为要求使用单个数据库并使用单独的登录,为每个区域注册是否可以在单个项目中同时使用Cookie身份验证和身份验证谢谢您的详细回答,这很有用