我可以/应该将 Asp.Net Identity 与组织帐户一起使用吗?
Posted
技术标签:
【中文标题】我可以/应该将 Asp.Net Identity 与组织帐户一起使用吗?【英文标题】:Can/Should I use Asp.Net Identity with Organizational Accounts? 【发布时间】:2013-11-01 07:07:03 【问题描述】:我希望我的用户使用他们的组织帐户(AD、AAD、O365)登录我的网络应用程序,并使用 Asp.Net Identity 在我的应用程序本地存储应用程序特定的配置文件或角色信息,我不知道的信息不想弄脏我的目录或我的租户的目录。
我不确定这是否是现实的,因为我找到的信息太少了。在 MVC 4 中它是可行的。我将创建一个 Empty MVC4 Web 应用程序,使用 Identity and Access 工具设置联合身份验证,并将名称声明存储在我使用 SimpleMembership 设置的用户表中(如 this。)
然而,对于新的开发来说,支持 Asp.Net Identity 而不是 SimpleMembership 似乎更好。但那里看起来要困难得多。查看 Visual Studio 2013 RTM 中的 ASP.NET Web 模板,我必须将个人帐户模板中的位与组织帐户模板中的位结合起来。我已经看到 Asp.Net 身份将外部登录信息存储在开箱即用的 AspNetUserLogins 表中(我可以先使用 EF6 代码进行更改),但我无法从我的 ClaimsIdentity 中找出要存储的信息最好的(tenantId 和名称声明?)或代码中的哪一点。组织帐户模板引用了 Microsoft.Aspnet.Identity,但似乎从未调用它。
我的方案可行吗?在 VS2013 最终版本中是否会有我可以构建的示例?使用自己的实现来存储角色和配置文件信息而不是 Asp.Net Identity 会更好吗?
【问题讨论】:
【参考方案1】:这是一个有效的场景,我已经实现了类似的东西。假设您想在本地存储库中存储 WAAD 用户的“元数据”。元数据是指基本识别信息,您可以使用这些信息将本地存储库中的用户与 WAAD 中的同一用户条目联系起来。这是我要存储的内容:
IdentityProvider(本例中为 WAAD)TenantId(此字段的格式可能因身份提供者而异,但一个字符串就足够了)UserId(同样,此字段的格式可能因 idP 而异,但字符串可以工作...名称声明,在这种情况下 - 只要它在租户内的用户之间是唯一的)
这是您应该能够从 ClaimsPrincipal/ClaimsIdentity 中获取的信息。我在 VS 2013 出现之前实现了我的应用程序,所以我推出了自己的应用程序,但是在阅读了新的“一个”ASP.NET 身份文档后,它看起来相当可扩展,使用它可能是个好主意。它甚至可以让您插入不同的存储提供程序(不仅仅是关系数据库)。
【讨论】:
这就是我回答这个问题时的想法。但是,我已经尝试了数周,并且总是偶然发现兼容性问题。我不记得我所有的尝试,但“一个”ASP.Net 身份在幕后使用了 OWIN。一旦我在也使用 Microsoft.IdentityModel.Clients.ActiveDirectory(用于 WAAD)的应用程序中引用它,事情就会崩溃。我恢复到我自己的个人资料/会员商店。如果你有更多的运气,我会很高兴听到。顺便说一句,派生的 ClaimsAuthenticationManager 是一个很好的起点。 msdn.microsoft.com/en-us/library/windowsazure/dn385717.aspx以上是关于我可以/应该将 Asp.Net Identity 与组织帐户一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Identity Custom PasswordValidator 检查用户名
将 asp.net 5 MVC 6 与 Identity 和 EF 6 一起使用的示例