我正在尝试将 cookie 从一个应用程序传递到另一个应用程序。这两个应用程序位于不同的服务器上。第一个应用程序(SharePoint 站点)在弹出窗口中打开第二个应用程序。在打开网站之前,应将 cookie 放入浏览器,其中包含登录用户(在 SharePoint 中)的用户名和密码 - 当然,出于安全目的,cookie 的值已加密。
另一方面,在作为 ASP.NET MVC3 Web 应用程序的第二个应用程序中,我创建了一个HttpModule
尝试在浏览器中定位此 cookie、解密内容并针对 WCF 服务公开的某些用户存储对用户进行身份验证的程序。
这是模块中的代码:
void httpApplication_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication httpApplication = sender as HttpApplication;
if (httpApplication != null)
{
HttpCookie authCookie = httpApplication.Context.Request.Cookies["SPAuthentication"];
if (authCookie != null)
{
String cookievalue = EncryptionManager.Current.DecryptStringAES(authCookie.Value, "p@s$w0Rd_Mo3T");
String[] parts = cookievalue.Split(';');
if (parts.Length == 2)
{
String username = this.GetToken(parts[0]);
String password = this.GetToken(parts[1]);
FedAuthentication.Current.Signin(String.Format(@"{0}\IPREmployee", username), password);
httpApplication.Context.Request.Cookies.Remove("SPAuthentication");
}
}
}
}
authCookie
尽管我实际上可以在浏览器中看到 cookie(使用 FireBug),但它始终为空。我注意到的一件事是 cookie 绑定到会话,所以它应该随着会话过期。我认为这可能是问题所在。然后我做了一些研究,发现 ASP.NET 不允许跨域 cookie。那么有没有办法解决这个问题?
PS:我无法访问 SharePoint 应用程序的源代码,因此我无法确定那里发生了什么。我唯一确定的是 cookie 实际上被放入浏览器中。