我将SharePoint 2010网站配置为仅将声明作为ADFS的答复方。我还为使用WIF + Extension for SAML 2.0 CTP的声明配置了ASP.NET应用程序作为同一ADFS服务器的答复方。
如果我导航到SharePoint,我会被重定向到ADFS服务器(https://.../adfs/ls?..。)并显示Windows登录提示。然后,如果我在同一浏览器实例中导航到我的ASP.NET应用程序,则重定向会快速发生到同一个ADFS服务器,自动进行身份验证,并在没有安全提示的情况下重定向回ASP.NET应用程序。与How to share authentication context between a SharePoint 2010 Site and ASP.NET applications中一样。
当我将ASP.NET应用程序嵌入SharePoint Web部件的IFrame中时,会出现此问题。启动新的浏览器实例并导航到SharePoint时,系统会提示Windows登录提示。当页面加载到IFrame I时,为嵌入式ASP.NET应用程序获取同一服务器的第二个Windows Prompt。如果我取消提示,我会在IFrame中获得401 Unauthorized。如果我导航到ASP.NET应用程序,我不会被提示,它会自动登录。导航回SharePoint应用程序,页面将加载包括IFrame内容而不提示。
SharePoint端点使用带有绑定POST的WS-Federation Passive Endpoint https://sharepoint:port/_trust/
。
ASP.NET应用程序端点使用SAML断言使用者端点https://aspnetapp/
和绑定POST和工件。
从两者传递的声明包含每个应用程序所需的全部内容。
有没有人知道如何在SharePoint中使用IFrame时阻止第二次登录提示?
答案 0 :(得分:1)
从现在内置的WIF类更新到System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0
后,它现在可以正常工作并进行单点登录。我假设从未完成的Microsoft.IdentityModel.Web.Saml2AuthenticationModule
SAML 2.0 CTP扩展存在兼容性问题。
答案 1 :(得分:0)
只是在黑暗中拍摄,但假设自定义ASP .NET应用程序和SharePoint在两台独立的机器上,那么考虑到ASP .NET页面在IFRAME中,可能会有一些关于kerberos的细微之处 - 它可能是一个需要在SharePoint到ASP .NET之间传递kerberos票证。
HTH。
答案 2 :(得分:0)
这只是猜测,但我相信这是因为这两个网站,Sharepoint网站和iframe中的嵌入式asp.net网站都开始同时加载。
由于两者都未经过身份验证,因此都会转到Adfs。但由于您未经过身份验证,Adfs会启动401质询,要求进行身份验证。但是,您的Web浏览器不会同时显示两个登录提示。相反,您获得了第一个登录提示,当您进行登录时,从Adf将保留身份验证的那一刻起,任何其他要求索赔的网站都将免费获取。但是内部网站asp.net已经开始登录了!您的浏览器不知道这一点并强制您继续登录。
作为结论,我的想法是拥有一个需要身份验证的sharepoint页面,然后重定向到另一个页面,该页面在iframe中有asp.net站点,这样您的浏览器就不会尝试启动两者的登录序列网站在同一时间。