我是MVC的新手,目前正在使用MVC6(EF7,Identity3,VS2015)......
我想在一个公司域(在不同的子域中)创建两个不同/独立的WebApp。
我想为两个应用程序使用通用/共享身份/登录系统 - 换句话说,我允许用户在两个应用程序中拥有一个帐户。
我没有域名认证选项(公司没有使用域名 - 我知道这很奇怪),所以我必须这样做?使用个人用户帐户...
在多个应用中创建和使用通用用户帐户的最佳方法/做法是什么?
首先,我考虑在App中创建两个不同的DBContext:一个用于Identity(用户数据库),第二个用于App相关的Db ...
这种方法会给我三个不同的数据库:
但是我怀疑它是否是良好的做法和最佳方式?
可能只有一个DBContext配置正确,但我不知道应该从哪里开始。
我已经阅读过有关SSO(单点登录)的内容 - 但据我所知,它对身份验证过程有所了解,所以稍晚一点 - 所以我不确定这个方向。
无论如何都无法找到如何在多个应用中创建通用用户帐户/个人资料的示例。
的更新:
我原来的问题可能太开放了...我不仅要问“做什么”和“做什么”。而且在MVC6' ...
中怎么做所以我的另外一个问题是:如何在MVC6中实现这一目标?我该怎么办?也许是一些例子?
如果我决定使用单独的用户数据库 - 那么从应用程序的角度来看,我将有两个数据库?在代码中如何处理这个问题?我应该创建两个单独的DBContexts - 或者只创建一个?
此外,我在SO上看到了一些意见,只使用一个DbContext是更好更简单的选择......
无论如何我昨天尝试使用2x DBContext - 当我为IdentityDbContext创建新控制器时一切正常,但我在尝试为第二个DBContext创建任何控制器时出错(与身份无关)......
(我已将此错误的描述提交给新问题:MVC6 Working with two DBContexts and error when create new controller)
提前感谢任何建议:)
答案 0 :(得分:1)
在以前版本的ASP.NET Identity(2)中,跨子域共享身份cookie是一种愚蠢的行为。我不确定第3版,但你可以测试它:
在Configure
类的Startup
方法中更改身份配置:
services.AddIdentity<ApplicationUser, IdentityRole>(config =>
{
config.Cookies.ApplicationCookie.CookieDomain = ".domain.com";
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
答案 1 :(得分:1)
如果有三个数据库是最好的方法,你的问题的答案是:这取决于。
这是否是一个好的做法无关紧要。
让我详细说明。
每个拥有专用数据库的应用程序的概念源于老式思维。大型企业架构由各种持久性存储组成,每个存储区都选择做最好的工作。所以它与良好实践无关。您应该将数据存储在最适合的位置。特别关注领域驱动设计和有界上下文,以便更好地理解我所说的内容。
所以问题是你需要三个数据库,如果在你的特殊情况下这是最好的选择,那么这就是你应该做的。为了使这个答案完整,我[&#39;我将描述我们的情况。我们有一个旧用户数据库,其中包含用户。我们无法摆脱它,直到所有的网络应用程序都被逐步淘汰。尽量减少它对我们客户的影响。因此,对于我们的新网络应用程序,我们只为用户使用这个旧数据库,并将azure存储用于我们需要存储的所有其他内容。换句话说,从概念上讲,我们的情况就像你描述的那样。所有其他Web应用程序使用的单独存储空间。
听起来对你来说是一个很好的解决方案吗?
<强>更新强> 至于MVC6,Identity Server 3具体。 ID服务器3能够使用自定义用户服务,允许您将所需的任何用户存储耦合在一起。以下是详细信息:https://identityserver.github.io/Documentation/docs/advanced/userService.html。这正是我们所做的。
至于你的其他问题;我们可能会将用户放在Azure表存储中,并在所有旧应用程序消失后通过IdentityServer4从那里检索它。现在,遗留MySQL数据库中没有任何东西可供我们使用。但是有些旧应用程序仍在使用它,所以......
这会回答你的问题吗?