c# – EnableCrossAppRedirects – クロスドメイン機能はどこで文書化されていますか?

ここで、ASP.NET FormsAuthenticationの興味深い機能が、この回答で説明されています。How do you pass an authenticated session between app domains

簡単なまとめ同じ暗号化キーを使用して2つのASP.NET Webサイトを作成できます。 WebsiteAはformsauthトークンを作成し、そのクエリ文字列(またはPOST本文)にそのトークンを使用してWebsiteBにリダイレクトできます。 WebsiteBでEnableCrossAppRedirectsをオンにすると、ASP.NETはトークンを検出してformsauth Cookieを作成します。コードでは:

FormsAuthentication.RedirectFromLoginPage("alice", true);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket("Alice", true, 30);
string encrypted = FormsAuthentication.Encrypt(ticket);
Response.Redirect("http://siteb.dev/Secure/WebForm1.aspx?" + FormsAuthentication.FormsCookieName + "=" + encrypted);

すばらしい機能のように思えますが、どこに文書化されているのですか?文書化されていない機能を使うと少し不安になります。

私が見たところ – どのMSDNリファレンスにもこの機能についての言及はありません。私は多分RedirectFromLoginPageが上の私のコードのようにリダイレクトを構築するだろうと思った、それはしません。

> EnableCrossAppRedirects – “リダイレクトURLが現在のアプリケーション内のページを指していない場合、RedirectFromLoginPageメソッド内でチェックが行われます。EnableCrossAppRedirectsがtrueの場合、リダイレクトが実行されます。”
> Forms Authentication Across Applications – サブドメインでクッキーが作成されるようにマシンキーを設定するためのいくつかのアドバイス、EnableCrossAppRedirectsについては何もない
> forms Element for authentication

ベストアンサー
リフレクタを見たことがあるフォーム認証の(やや文書化されていない)機能があります。 EnableCrossAppRedirectsが有効になっている場合、.NETは認証Cookieの検索に加えて、フォーム投稿またはクエリ文字列からフォーム認証の “cookie”を抽出しようとします。このコードは、ExtractTicketFromCookieメソッドのFormsAuthenticationクラスに埋め込まれています。このコードでは、リクエストデータで認証Cookieを見つけようとしていることが明らかにわかります。

if (FormsAuthentication.EnableCrossAppRedirects)
{
    text = context.Request.QueryString[name];
    if (text != null && text.Length > 1)
    {
        if (!cookielessTicket && FormsAuthentication.CookieMode == HttpCookieMode.AutoDetect)
        {
            cookielessTicket = CookielessHelperClass.UseCookieless(context, true, FormsAuthentication.CookieMode);
        }
        try
        {
            formsAuthenticationTicket = FormsAuthentication.Decrypt(text);
        }
        catch
        {
            flag2 = true;
        }
        if (formsAuthenticationTicket == null)
        {
            flag2 = true;
        }
    }
    if (formsAuthenticationTicket == null || formsAuthenticationTicket.Expired)
    {
        text = context.Request.Form[name];
        if (text != null && text.Length > 1)
        {
            if (!cookielessTicket && FormsAuthentication.CookieMode == HttpCookieMode.AutoDetect)
            {
                cookielessTicket = CookielessHelperClass.UseCookieless(context, true, FormsAuthentication.CookieMode);
            }
            try
            {
                formsAuthenticationTicket = FormsAuthentication.Decrypt(text);
            }
            catch
            {
                flag2 = true;
            }
            if (formsAuthenticationTicket == null)
            {
                flag2 = true;
            }
        }
    }
}

したがって、両方のアプリケーションでEnableCrossAppRedirectsを有効にすると、最初のアプリケーションは外部サイトへのリダイレクトを許可され、2番目のアプリケーションはリクエストから認証Cookieを自動的に読み込みます。ログインURLを返すURLがCookieデータを送信するか、クエリ文字列で送信するように設計する必要があります。また、マシンキーが同期されていること、またはCookieが外部アプリのマシンキーを使用して(最初のアプリケーションによって)暗号化されていることも確認する必要があります。デフォルトで.NETはあなたのためにクエリ文字列で暗号化された認証クッキーを送り、あなたのマシンのキーが同期していると仮定します(下記のMSDNの引用を参照)。

これはもう少しinfo on MSDNです。

If the CookiesSupported property is true, and either the ReturnUrl
variable is within the current application or the
EnableCrossAppRedirects property is true, then the
RedirectFromLoginPage method issues an authentication ticket and
places it in the default cookie using the SetAuthCookie method.

If CookiesSupported is false and the redirect path is to a URL in the
current application, the ticket is issued as part of the redirect URL.
If CookiesSupported is false, EnableCrossAppRedirects is true, and the
redirect URL does not refer to a page within the current application,
the RedirectFromLoginPage method issues an authentication ticket and
places it in the QueryString property
.

セキュリティへの影響については大きな警告があります。 EnableCrossAppRedirectsは、ASP.NETログインコントロールが外部の戻りURL(別のWebアプリケーション)にリダイレクトするのを防ぐセキュリティ設定です。この設定を有効にすると、ある種の攻撃で悪用される可能性があります。ユーザーは正式なログインページに送られますが、ログイン時には同じと思われる別のアプリケーションにリダイレクトされます。これがデフォルトで無効になっている理由です。

この機能を有効にするときにこれを軽減するのに役立つ1つの方法は次のとおりです。

To improve security when using cross-application redirects, you should
override the RedirectFromLoginPage method to allow redirects only to
approved Web sites.

また、傍受した人は誰でもアカウントを制御できるようになるため、転送中の「Cookie」を保護するためにリダイレクト要求がSSLを介して確実に処理されるようにする必要があります。

転載記事の出典を記入してください: c# – EnableCrossAppRedirects – クロスドメイン機能はどこで文書化されていますか? - コードログ