【问题标题】:ASP.NET MVC 5 - Multiple projects, Single authentication - SSOASP.NET MVC 5 - 多个项目,单一身份验证 - SSO
【发布时间】:2015-03-27 15:47:35
【问题描述】:

背景信息: 我们开发了 3 个独立的 ASP.NET 应用程序,现在也作为套件出售。客户可以订购 1 个、2 个或所有应用程序。

作为独立的应用程序,这给我们带来了挑战,我们不完全确定如何解决它:身份验证。这些应用程序都有自己的 Indentity 实现,这迫使客户创建每个用户帐户 3 次,并且用户需要为每个应用程序单独登录。因此,客户端请求 SSO 实施。

问题: 我们对 SSO 进行了一些研究,Thinktecture IdentityServer 看起来非常好,能够解决我们的问题。但是,用户连接到应用程序中的某些实体。我们遇到了一些问题:

  • 如何确保 IdentityServer 和三个客户端应用程序之间的一致性(或外键)?
  • 用户在创建时需要在应用程序中可用(用户需要能够选择其他用户,即使他们尚未登录)。在身份服务器中创建用户时,如何确保在应用程序中创建用户?

可能我们完全走错了路 - 是否有其他解决方案可以解决我们面临的问题?非常感谢提前..

【问题讨论】:

    标签: asp.net-mvc single-sign-on asp.net-identity thinktecture-ident-server


    【解决方案1】:

    首先,请记住,vs2013 Web 模板中包含一个 OWIN Authorization server,如果您愿意,可以将其撕成独立服务器。换句话说,Thinktecture 服务器不是您唯一的选择,尽管它更强大且功能更齐全。

    为了解决您手头的问题,我想到了几个选项:

    1. 将用户管理拆分为单独的数据库和单独的 DbContext。如果将代码编写为类库,则可以在单个集中式数据库中管理所有用户,并重用 DbContext 和派生的 IdentityUser 类。这是处理这种情况的更简单、更快、更简单的方法。
    2. 创建用于创建用户的安全 Web API 并将其包含在所有 3 个站点上。子类化 Identity UserManager 并调用其他两个站点以首先在其他站点上创建用户,然后在当前站点上创建用户。在任何站点上失败时,不要创建用户并在创建用户的任何站点上回滚。这个选项比第一个选项需要更多的工作,因为您必须保持同步,但如果由于某种原因您不能使用单个数据库进行用户管理,这将起作用。

    【讨论】:

      【解决方案2】:

      您需要在头脑中关闭 DBA,并以不同的方式看待事物。外键只在关系型数据库中可用,即使在那里你也不能总是链接到其他数据库中的实体,即使数据库位于同一台服务器上。

      所以放弃“外键”要求,只需使用用户名或 UserId(可能是 GUID)将您的域对象与用户相关联。

      至于第二个要求 - 我不确定问题是什么。如果您说您需要为尚不存在的用户创建域实体,那么您无论如何都搞砸了 - 您无法使用不存在的东西。简单的答案是首先在身份服务器中创建用户,然后为该用户创建域实体。然后稍后您可以更改用户属性并将用户名/密码提供给真实的人使用。

      【讨论】:

        猜你喜欢
        • 2014-10-12
        • 2014-01-02
        • 2015-01-01
        • 1970-01-01
        • 2015-03-06
        • 2014-03-20
        • 1970-01-01
        • 1970-01-01
        • 2013-12-23
        相关资源
        最近更新 更多