2016-09-20 98 views
0

假设我有两个网站位于不同的域,并且它们已通过SSO登录身份验证。我登录到第一个网站并进行身份验证,现在我决定使用第一个网站中显示的链接访问第二个网站。此链接重定向到第二个网站,不需要凭证。 (请注意,这些网站是由其他公司开发和托管的,我无法访问源代码。我有一个登录凭据,我期望访问第二个网站的页面数据)使用.net访问跨域单一登录网站.net

我想使用.net代码访问网站。我已经完成了一些工作,并使用重定向到第二个网站的HTTP请求和cookie访问第一个网站的链接。但不久之后,我点击链接,在新的浏览器选项卡中打开域2,并生成新的会话ID。它与第一个网站cookie没有任何关系。但是当我手动传递网站2的URL和当前会话ID时,我可以访问网站2的数据。

SSO登录后面是否有任何安全机制可以突破以访问网站1和网站2的公共会话Id?当两个域有两个会话ID时,如何找到两个域之间的连接?我不能在这里发布代码,因为它有我的客户的隐私信息。

回答

0

我解决了这个问题。从两个域发送到登录服务器的SAML请求和中继状态。即使它们不相同,我们在访问表单数据时也必须考虑它们。还有cookie,我必须特别从第一个请求到最后一个请求发送pls_login_cookietime。

例:

变种饼干= 新 { pls_login_cookieTime = Cookietime.CookieValue( “pls_login_cookieTime”), pls_login_SimpleSAMLSessionID = HttpUtility.UrlEncode(login.CookieValue( “pls_login_SimpleSAMLSessionID”)), TimeOutCheckID =登录.CookieValue( “TimeOutCheckID”), pls_login_SimpleSAMLAuthToken = login.CookieValue( “pls_login_SimpleSAMLAuthToken”), pls_login_rememberme = login.CookieValue( “pls_login_rememberme”)

这里共okietime和login是两种不同的URL访问,其中CookieTime是初始URL,登录包括登录服务器URL。即使登录不提供响应cookie作为pls_login_cookieTime,我必须将它作为请求标头传递给最终网址。

他们很少混淆。如果您使用像fiddler这样的工具来检查http请求,您可以了解他们如何在多个域中管理cookie的大部分内容。休息在你的手中。你必须思考一点,不同的。但总体来说并不难。它只是困惑而已。