ASP.NET Identity自动注册声明用户

3
我们正在尝试构建一个内部网站应用程序,我们希望用户能够使用他们的域凭据登录我们的网站并自动注册。我看到 Identity 的所有示例代码都显示用户在 AccountController 上通过注册页面进行注册,并且在那里使用 UserManager 创建用户。
由于我们要求所有页面进行身份验证,因此用户目前只需重定向到域登录(我们目前使用 Azure Active Domain),然后返回到我们的页面。看起来 Identity 的默认行为是在这种情况下不在应用程序数据库中创建用户,因此我们得到了已验证的 Identity,但在我们的数据库中没有相应的 User 对象。有没有好的方法来创建这个用户?最好的创建用户的方法是什么?UserLogin 表在其中起什么作用,我假设它以某种方式用于将 ClaimsPrincipal 与应用程序数据库 User 匹配?
我们正在使用 MVC 5、Entity Framework 6 和 WIF 2。
1个回答

2
当您使用Azure Active Directory(组织帐户)时,活动目录是您的用户数据库。除非您特别添加它,否则不会像使用个人账户进行身份验证时那样获得AspNetUserLogins表。
我假设您想创建某种用户表,以便可以存储每个用户的用户配置文件数据和/或一些授权声明。您仍然可以这样做。例如,您可以在SQL数据库中(或任何其他数据库中)创建一个表来存储用户配置文件记录。代码中的一个很好的可扩展性点是从{{link1:ClaimsAuthenticationManager}}派生一个类并重写Authenticate方法。在此处,您可以检查传入经过身份验证的用户的声明,查找您在数据库表中存储的用户的其他配置文件声明,然后将这些声明添加到ClaimsPrincipal的声明集中。 Azure AD在传入的主体对象中提供的其中一个声明是objectidentifier。这将是您用户配置文件表的一个好键,以便您可以在随后的登录中正确地识别用户。
一种替代我刚刚描述的用户配置文件表方法的选择是使用Graph API扩展Azure AD架构的能力。 我个人尚未尝试过这种技术,而且它仍处于预览阶段。 但是,总体想法是您可以为您的企业应用程序注册一个扩展,其中会包括每个用户的附加属性。了解更多

我已经有了AspNetUser和AspNetUserLogin表,它们是由我们的EntityFramework上下文生成的,并从IdentityDbContext<>继承。这些表如何与Azure Active Directory身份验证相关联?或者我需要在ClaimsAuthenticationManager内部编写代码来实现它们? - John
他们没有。也许你的项目最初是使用个人账户,后来改为使用组织账户了??? - Rick Rainey
那么对于组织账户,使用IdentityDbContext<>没有任何好处?我们最好设置自己的应用程序特定的用户/角色表了? - John
我想你可以将其用作个人资料数据的起点。如果是我,我可能会创建一个新表,专门用于用户个人资料实体,并删除为个人帐户、登录等添加的所有其他内容。 - Rick Rainey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接