我有一组应用程序可能托管在不同的域下或作为公共域的子域。
所有这些应用程序都将针对相同的ADFS服务进行身份验证。
如果其他应用程序使用相同的ADFS服务进行身份验证,我希望我的应用程序自动登录。
例如,您只需登录谷歌一次,然后如果您访问他们的任何应用程序站点(Gmail / Google Drive / Google+),您将自动登录该应用程序。
因此,我们假设我们有一个ADFS服务 ADFS_AUTH_SERVICE 。
应用 Website1 使用 ADFS_AUTH_SERVICE 进行身份验证。
用户访问 Website2 ,其中还配置为使用 ADFS_AUTH_SERVICE 进行身份验证。
因此,当用户访问Website2时,他应该自动登录。
更新:为了更加清晰,以下是当前发生的序列:
1。用户输入http://site1/Home
2. 用户被重定向到在线Microsoft ADFS身份验证页面。
3。用户输入其详细信息并成功通过ADFS服务进行身份验证,并重定向到http://site1/Home
4。用户的姓名在http://site1/Home
上可见。
5. 用户点击site1中的链接,将他带到http://site2/Home
预期结果: 用户名应该在site2 / Home上可见
实际结果: 用户被重定向到ADFS登录页面。
答案 0 :(得分:0)
这就是ADFS的工作原理。我认为您的问题是您必须了解所有三个应用程序都是独立维护自己的身份验证:
如果您已经实现了一个流程,其中WebSite1强制用户在ADFS中进行身份验证,那么您有以下情况:
为了在WebSite2中自动验证用户,您只需强制验证流程,即要求对所有可能的请求进行授权
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
用于WebForms或
[Authorize]
对于MVC。
这样,始终需要身份验证的WebSite2将重定向到ADFS,ADFS将自动重定向回来,因为用户已经在那里进行了身份验证。
不幸的是,如果用户通过身份验证,则检查没有神奇的流量。您所能做的就是启动被动(基于浏览器)的流程。请注意,如果用户未事先在ADFS中进行身份验证,则ADFS将要求用户提供其凭据。