Asp.net core 如何使用IdentityServer4从本地数据库对本地用户进行身份验证?
我正在为多个现有项目创建SSO解决方案。大多数应用程序已经使用了相同的数据库,所以相同的用户和我在IdentityServer中使用这些用户。但有一个应用程序有自己的用户数据库和登录屏幕。此表中的用户在此应用程序(FK)中的一个表中使用 我的想法是让现有用户数据库保持原样。将一列Asp.net core 如何使用IdentityServer4从本地数据库对本地用户进行身份验证?,asp.net-core,entity-framework-core,asp.net-identity,identityserver4,Asp.net Core,Entity Framework Core,Asp.net Identity,Identityserver4,我正在为多个现有项目创建SSO解决方案。大多数应用程序已经使用了相同的数据库,所以相同的用户和我在IdentityServer中使用这些用户。但有一个应用程序有自己的用户数据库和登录屏幕。此表中的用户在此应用程序(FK)中的一个表中使用 我的想法是让现有用户数据库保持原样。将一列MasterUserGuid添加到Users表中,该表将包含“master”用户Guid(以便IdentityServer用于身份验证的用户),并实现以下流程: 用户打开应用程序,但未登录 用户被重定向到Identity
MasterUserGuid
添加到Users
表中,该表将包含“master”用户Guid(以便IdentityServer用于身份验证的用户),并实现以下流程:
MasterUserGuid
列中使用此GUID),而不是使用全局用户3
,或者在IdentityServer4中是否可能/支持该步骤。目前,我被重定向到IdentityServer,经过身份验证并重定向回,但随后应用程序尝试使用此外部用户
在研究过程中,我读到用户应该在一个表中,所以这种方法可能是完全错误的,最好删除本地用户,并对所提到的表中断FK,并对用户进行一些手动迁移
我提供的步骤中描述的场景是否可行且合理?您需要首先调整应用程序,以通过IdentityServer进行身份验证。删除所有与注册、登录等相关的ASP.NET核心标识逻辑。假设所有这些都将在IdentityServer端完成。然后实现
iclaimsgransformation
的实例,该实例将替换当前的ClaimsPrincipal
,或者根据需要使用所需的声明值(从本地数据库填充)向其添加其他标识。以下是一个例子:
public类MyClaimsTransformer:iclaims转换
{
公共任务TransformAsync(ClaimsPrincipal主体)
{
var索赔=新列表();
索赔。添加(新索赔(…);//在这里输入索赔类型和价值
var标识=新的索赔实体(索赔);
本金。额外性(身份);
返还本金;
}
}
然后在IOC中的启动中注册索赔转换器。ConfigureServices
方法:
services.AddTransient();
首先,你的应用程序是什么?是ASP.NET classic(owin)还是ASP.NET Core,它是否使用MS Identity FW访问数据库?它是使用EntityFramework的ASP.NET Core MVC。目前,它使用Microsoft.AspNet.Identity
对此本地数据库进行身份验证。据我所见(我还没有编写此应用程序),AspNet.Identity使用相同的上下文(app.CreatePerOwinContext((选项,上下文)=>ApplicationUserManager.Create(context.Get())
其中模型实体
是EF上下文类。标识使用数据库中的标准表集(AspNetRoles
,AspNetUsers
等)在上下文中未映射为IDbSet
s。我现在认为解决方案可能是让用户通过全局用户身份验证,但查找并覆盖使用UserID的位置,使用映射列和本地用户ID而不是全局用户ID。我现在将检查这在代码中是否有意义。首先,我将去掉AspNet.ID实体。然后在AddAuthentication.AddOpenIdConnect
中调整本地令牌,以保留您喜欢的任何内容作为主要身份(在应用程序内)