【问题标题】:SSO for DNN websitesDNN 网站的 SSO
【发布时间】:2015-09-04 19:20:25
【问题描述】:

我的要求是这样的:

我有一个 DNN 网站 www.websiteA.com。

我想在同一个 DNN 安装上构建 www.websiteB.com 和 www.websiteC.com。 www.websiteB.com 和 www.websiteC.com 应该允许 www.websiteA.com 的用户使用相同的用户名和密码登录。

当用户登录 www.websiteA.com,然后导航到 www.websiteB.com 或 www.websiteC.com 时,他们不必再次登录,因为他们已经登录到主网站。

我找到了可以让我在这些网站之间共享用户的模块,这样他们就可以使用相同的凭据登录到三个网站中的任何一个。 但是,我找不到让用户同时登录所有网站的方法,这样用户就不必再次登录。

我希望在不过多修改 DNN 源的情况下执行此操作。由于所有三个网站都安装在同一个 DNN 上,我希望有一种方法可以共享身份验证 cookie,但我还没有找到任何方法。

谁能在这件事上给我更多的指导?谢谢!

【问题讨论】:

  • 您可能想查看 DNN 的付费版本。
  • 感谢@ChrisHammond 我读到 Evoq 使用 Active Directory 提供 SSO。如果这是真的,那么它不符合我们的要求。你知道它是否可以在没有 AD 的情况下工作?
  • @ChrisHammond 我研究了更多,发现付费版本的 DNN 具有创建站点组的功能,这将实现用户共享 - 让主网站的用户使用相同的凭据登录子网站。我正在寻找的是用户一旦登录到master就不需要登录到子网站。我找不到关于这是否受支持的明确答案。你能帮忙吗?
  • 不幸的是,您需要弄清楚如何让所有站点共享一个 cookie。如果你用子域来做,都在同一个顶级域中,这不是太难,否则,我不知道该怎么做

标签: single-sign-on dotnetnuke dotnetnuke-7


【解决方案1】:

我为使用站点组功能的两个客户做了同样的事情,但它需要像上面的 cmets 一样的警告。您必须为其他门户使用子别名,以便它们都在同一个域中。这是关键,以便用户的会话 cookie 可以跨门户使用。

这就是我设置门户别名的方式:

  • websiteA = 门户 0,别名 websiteA.com(主要)
  • websiteB = 门户 1,别名 websiteA.com/b(主要)和别名 websiteB.com 重定向别名
  • websiteC = 门户 2,别名 websiteA.com/c(主要)和别名 websiteC.com 重定向别名

用于管理组的站点组用户界面是 Evoq 的一项功能,但后端是核心平台结构。

以下是在 DNN 社区中没有 UI 的情况下如何配置它:

在 PortalGroups 表中创建一条记录: MasterPortalID = 0,PortalGroupName = 'WebsiteA Group',AuthenticationDomain = 'websiteA.com'

现在更新 Portals 表中的 PortalGroupID 字段:

  • 其中 PortalID = 0,设置 PortalGroupID = -1
  • WHERE PortalID = 1,SET PortalGroupID = 1(假设您添加的新 PortalGroupID 为 1)
  • 其中 PortalID = 2,SET PortalGroupID = 1

【讨论】:

    【解决方案2】:

    您可以做的另一件事是编写自己的自定义 DNN 身份验证提供程序 (http://www.dnnsoftware.com/community-blog/cid/134678/dotnetnuke-tips-and-tricks-12-creating-your-own-authentication-provider)。

    然后,只需让身份验证提供程序检查用户系统上的身份验证 cookie。如果 cookie 有效(且未过期),您可以自动登录。否则,将它们重定向到主登录屏幕。我这样做了,但另一个站点是基于 Java 的仪表板。

    【讨论】:

    • 如何检查属于不同域的身份验证 cookie?我认为这是不允许的。抱歉,如果我遗漏了一些明显的东西。
    • 也许我用错了。我刚刚创建了一个通用 cookie 并将其用于身份验证。
    • 谢谢,我现在明白了。这让我想到了一个问题——网站一加载,我就必须阅读这个 cookie。自定义身份验证提供程序将仅在登录页面上。那么为了自动登录,用户必须导航到登录页面吗?您能否提供有关您的解决方案如何工作的更多详细信息?非常感谢您的投入!
    • 抱歉,时间久了,忘记了一些细节。基本上,我创建了一个 DNN 模块来检查/刷新 cookie。在 DNN 中,有一种说法是“将此模块添加到每个页面”。该模块没有 UI,因此您甚至看不到它。因此,每次用户导航到任何页面时,cookie 都会被刷新。然后,自定义身份验证提供程序检查此 cookie。我在这个答案中有更多描述:stackoverflow.com/questions/21131243/…
    • 此外,当用户登录时,它会在具有到期日期的表中创建一个令牌。这是用来确保他们不会一直保持登录状态的。该模块将更新数据库中令牌的到期时间。我也在这个问题中描述过:stackoverflow.com/questions/18621303/…
    猜你喜欢
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多