【问题标题】:Sharing ADFS authentication across multiple domains跨多个域共享 ADFS 身份验证
【发布时间】:2014-08-22 09:12:13
【问题描述】:

我有一组可能托管在不同域下或作为公共域的子域的应用程序。

所有这些应用程序都将针对同一个 ADFS 服务进行身份验证。

如果另一个应用程序使用相同的 ADFS 服务进行了身份验证,我希望我的应用程序自动登录。

例如,您只需登录 google 一次,然后如果您访问他们的任何应用程序站点(Gmail / Google Drive / Google+),您就会自动登录到应用程序。

因此,假设我们有一个 ADFS 服务 ADFS_AUTH_SERVICE。

应用程序 Website1 通过 ADFS_AUTH_SERVICE 进行身份验证。

用户访问 Website2,该网站也被配置为使用 ADFS_AUTH_SERVICE 进行身份验证。

因此,当用户访问网站 2 时,他应该会自动登录。

更新:为更清楚起见,以下是当前发生的顺序:

1.用户输入http://site1/Home

2.用户被重定向到在线 Microsoft ADFS 身份验证页面。

3.用户输入他的详细信息并成功通过 ADFS 服务进行身份验证,并被重定向到http://site1/Home

4.用户名在http://site1/Home上可见。

5.用户点击site1中的一个链接,将他带到http://site2/Home

预期结果:用户名应该在 site2/Home 上可见

实际结果:用户被重定向到 ADFS 登录页面。

【问题讨论】:

    标签: asp.net ws-federation


    【解决方案1】:

    这就是 ADFS 的工作原理。我认为您的问题是您必须了解所有三个应用程序都独立维护自己的身份验证:

    • 网站1
    • 网站2
    • ADFS

    如果您已经实现了 WebSite1 强制用户在 ADFS 中进行身份验证的流程,那么您有以下情况:

    • WebSite1(已通过身份验证)
    • WebSite2(尚未验证)
    • ADFS(已通过身份验证)

    为了在 WebSite2 中自动验证用户身份,您只需强制验证流程,要求对所有可能的请求进行授权

     <authorization>
         <deny users="?" />
         <allow users="*" />
     </authorization>
    

    对于 WebForms 或

     [Authorize]
    

    对于 MVC。

    这样,始终需要身份验证的 WebSite2 将重定向到 ADFS,ADFS 将自动重定向回来,因为用户已经在那里进行了身份验证。

    不幸的是,如果用户通过了身份验证,检查并没有神奇的流程。您所能做的就是启动被动(基于浏览器)的流程。请注意,如果用户未事先在 ADFS 中进行身份验证,ADFS 将要求用户提供她的凭据。

    【讨论】:

    • 现在我已经为两个不同的站点设置了相同的 ADFS 身份验证。我浏览了site1,然后单击了site1 中的一个链接,该链接将我重定向到了site2。一旦我被重定向到 site2,我就会被带到 ADFS 身份验证页面。正如你所说,我应该被重定向回来,并且 site2 应该显示为用户登录。但是,这不会发生。我留在 ADFS 站点上,并显示登录页面。我正在使用 Microsoft ADFS 服务进行身份验证。
    • @ChrisSerrao:这听起来像是您的 ADFS 配置错误,因为这应该永远发生。 ADFS 发布自己的 cookie,因此假设 site1 也使用相同的 ADFS(您确定吗?),ADFS 不应再次显示登录页面。 ADFS 的哪个版本,ADFS 的web.config 中microsoft.identityserver.web 节点的内容是什么?
    • 你是对的。这个问题不应该发生。当我从 VS2013 运行站点时,它打开了一个 IE 浏览器实例,我登录了它。然后我从在同一个 ADFS 上注册为不同应用程序的不同端口运行该项目的副本,它打开了另一个 IE 实例并将我带到登录页面。但是,在关闭应用程序并清除浏览器缓存和历史记录后,我执行了相同的步骤,但是我没有登录到 site2,而是在为 site1 打开并访问了 site2 的 IE 实例中打开了一个新选项卡,然后我自动登录了.
    • AFAIK,浏览器应该跨选项卡和实例共享域的 cookie。我注意到的这种特殊行为非常奇怪。没有进行代码更改或配置更改。
    • @ChrisSerrao:浏览器在选项卡之间共享 cookie,但不共享实例。
    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 2015-12-17
    • 2017-10-16
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多