IdentityServer4 + Asp Identity + EF 配置两个UsersSet/Providers
IdentityServer4 + Asp Identity + EF Configure two UsersSet/Providers
在这方面找不到很好的线索。我有一个 aspnetcore 应用程序,identityserver4 配置为使用 asp 身份和 sql 数据库。
业务要求所有非 AD 用户都存储在此 asp 身份数据库中。
所有 AD 用户都在 Azure 上定义。我可以使用 LDAP 对他们进行身份验证并接收他们的数据。
问题出现在身份验证之后。每当 asp 身份尝试调用:
var user = await UserManager.FindByNameAsync(userName);
对于 AD 用户,由于用户不存在而失败。这是因为它使用 EF 查询 asp 身份数据库,其中未定义这些用户。
private DbSet<TUser> UsersSet { get { return Context.Set<TUser>(); } }
我无法在 asp 身份数据库中存储任何 AD 信息(业务需求)。我正在尝试找到一种方法让用户存储查看 asp 身份表以及 Azure(通过 LDAP)。
我当前在进行初始身份验证时获取 AD 用户的方法是:
await GetADUser(queryParams),
它使用 LDAP 来验证和抓取用户对象。
一个额外的要求是我不能使用外部登录屏幕,登录必须全部从同一家公司完成,面向登录 UI。也就是没有外部供应商。
根据@mxmissile,抽象出 UserManager 是正确的调用。然后,您还可以根据需要抽象出其他管理器以实现特殊功能。这实际上是这部分代码在继承层中唯一的class是虚拟的。
内置函数可让您注册自定义管理器:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddUserManager<ApplicationUserManager<IdentityUser>>()
.AddSignInManager<ApplicationSignInManager<IdentityUser>>()
希望这对有类似问题的其他人有所帮助。我最终只是覆盖了基本用户管理器中的几个功能,并为不需要我的新逻辑的任何事情调用了基本方法。默认情况下,ASP Identity 不会尝试通过电子邮件查找用户 - 仅供参考。
在这方面找不到很好的线索。我有一个 aspnetcore 应用程序,identityserver4 配置为使用 asp 身份和 sql 数据库。
业务要求所有非 AD 用户都存储在此 asp 身份数据库中。 所有 AD 用户都在 Azure 上定义。我可以使用 LDAP 对他们进行身份验证并接收他们的数据。 问题出现在身份验证之后。每当 asp 身份尝试调用:
var user = await UserManager.FindByNameAsync(userName);
对于 AD 用户,由于用户不存在而失败。这是因为它使用 EF 查询 asp 身份数据库,其中未定义这些用户。
private DbSet<TUser> UsersSet { get { return Context.Set<TUser>(); } }
我无法在 asp 身份数据库中存储任何 AD 信息(业务需求)。我正在尝试找到一种方法让用户存储查看 asp 身份表以及 Azure(通过 LDAP)。
我当前在进行初始身份验证时获取 AD 用户的方法是:
await GetADUser(queryParams),
它使用 LDAP 来验证和抓取用户对象。
一个额外的要求是我不能使用外部登录屏幕,登录必须全部从同一家公司完成,面向登录 UI。也就是没有外部供应商。
根据@mxmissile,抽象出 UserManager 是正确的调用。然后,您还可以根据需要抽象出其他管理器以实现特殊功能。这实际上是这部分代码在继承层中唯一的class是虚拟的。
内置函数可让您注册自定义管理器:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddUserManager<ApplicationUserManager<IdentityUser>>()
.AddSignInManager<ApplicationSignInManager<IdentityUser>>()
希望这对有类似问题的其他人有所帮助。我最终只是覆盖了基本用户管理器中的几个功能,并为不需要我的新逻辑的任何事情调用了基本方法。默认情况下,ASP Identity 不会尝试通过电子邮件查找用户 - 仅供参考。