重新使用创建到另一个网站的会话

时间:2014-10-29 17:12:54

标签: c# asp.net session

我们有一个带有Page_Load代码的aspx页面,该代码调用第三方的TokenGenerator.aspx页面来生成SSO令牌

private string GetSSOToken()
{
  using (WebClient client = new WebClient())
  {
    //serverUri is https://theirsite.com/Token.aspx, ssoRequestParam is a NameValueCollection
    byte[] responsebytes = client.UploadValues(serverUri.AbsoluteUri, "POST", ssoRequestParam);

    var ssoToken = Encoding.UTF8.GetString(responsebytes);

    return ssoToken;
  }
}

将返回的ssoToken添加到用作iframe src的URL中。最终看起来像这样:

var frameUrl = "https://theirsite.com/SSO.aspx?ssotoken=returnedToken";
frame.Attributes["src"] = frameUrl;

然后页面加载到浏览器中,一切都很顺利。这已经有一段时间了。

现在我们需要添加一种注销SSO.aspx的方法。在我们的Logout()方法退出我们的应用程序时,我尝试调用他们的注销页面:

using (WebClient client = new WebClient())
{
  var logoutUrl = "https://theirsite.com/SSO.aspx?logout=true";
  var s = client.DownloadString(logoutUrl);
}

但注销永远不会发生;他们的应用程序没有显示注销发生,我可以将frameUrl粘贴到浏览器中并查看页面。

作为测试,这适用于注销:

生成frameUrl

frameUrl复制/粘贴到浏览器中:它加载正常。

在新的单独窗口中粘贴logoutUrl:注销不会发生,仍然可以加载frameUrl

在同一浏览器的另一个标签页中,粘贴logoutUrl:注销发生,frameUrl会提供相应的“令牌过期”消息。

所以我猜这是因为第一个WebClient会话与第二个WebClient会话不同......但我不确定如何在注销期间重用第一个会话。

0 个答案:

没有答案