あるアプリケーションから別のアプリケーションに Cookie を渡そうとしています。2 つのアプリケーションは別々のサーバー上にあります。最初のアプリケーション (SharePoint サイト) は、ポップアップで 2 番目のアプリケーションを開きます。サイトを開く前に、(SharePoint で) ログインしているユーザーのユーザー名とパスワードを含む Cookie をブラウザーにドロップする必要があります。もちろん、Cookie の値はセキュリティ上の目的で暗号化されます。
一方、ASP.NET MVC3 Web アプリケーションである 2 番目のアプリケーションでは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 を使用)、常に null です。私が気づいたことの 1 つは、Cookie がセッションにバインドされているため、セッションと共に期限切れになることです。これが問題かもしれないと思いました。次に、いくつかの調査を行ったところ、ASP.NET ではクロスドメイン Cookie が許可されていないことがわかりました。これを回避する方法はありますか?
PS: SharePoint アプリケーションのソース コードにアクセスできないので、そこで何が起こっているのかわかりません。私が確信しているのは、Cookie が実際にブラウザーにドロップされているということだけです。