SQL-Server Reporting Services 2012 (SSRS 2012) をフォーム認証に切り替えて、インターネット経由で使用できるようにしました。
SSRS 2012 のフォーム認証のサンプルがどこにも見つからなかったので、SSRS 2008R2 のサンプルを使用して、シングル サインオン (SSO) 用に 2012 に適合させる必要がありました。
その時点で、すべてが期待どおりに機能しているように見えました。ドメイン間でSSOを機能させることさえできました。
しかし今、私は問題を抱えています:
HTML が非 IE5-QuirksMode で正しく表示されるように、td border-size を変更する小さな JavaScript を挿入する必要があったため、Google Chrome ですべてのレポート (200 以上) をテストしていました。約50回目のレポートの後、私は突然得ました:
「HTTP 400 不正なリクエスト - リクエストが長すぎます」
その後、以前は機能していたレポートでさえ、他のレポートを表示できなくなりました。
この問題は Cookie が多すぎることが原因のようです。実際、いくつかの「*_SKA」(Session Keep Alive?) Cookie を削除すると、再び機能し始めました。
私の問題は、この「Cookie オーバーフロー」の原因がわからないことです。また、これが Chrome のバグなのか、Vanilla SSRS のバグなのか、新しいフォーム認証によって引き起こされたバグなのかはわかりません。
Cookie と関係のある新しいフォーム認証で行うことは次のとおりです。
using System;
using System.Collections.Generic;
using System.Text;
namespace FormsAuthentication_RS2012
{
internal class FormsAuthenticationWorkaround
{
public static void RedirectFromLoginPage(string strUser, bool createPersistentCookie)
{
//string url = System.Web.Security.FormsAuthentication.GetRedirectUrl(strUser, true);
string url = GetRedirectUrlWithoutFailingOnColon(strUser, createPersistentCookie);
SQL.Log("User: '" + strUser + "' ReturnUrl", url);
if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Response != null)
System.Web.HttpContext.Current.Response.Redirect(url);
}
// https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web.Security/FormsAuthentication.cs
// @MSFT: WTF are u guys smoking ?
public static string GetRedirectUrlWithoutFailingOnColon(string userName, bool createPersistentCookie)
{
if (userName == null)
return null;
System.Web.Security.FormsAuthentication.SetAuthCookie(userName, true, "/");
string returnUrl = null;
if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Request != null)
returnUrl = System.Web.HttpContext.Current.Request.QueryString["ReturnUrl"];
if (returnUrl != null)
return returnUrl;
returnUrl = System.Web.Security.FormsAuthentication.DefaultUrl;
return returnUrl;
}
}
}
そして、このコードは、下部に表示される「sqlAuthCookie」を作成します。「sqlAuthCookie」は 1 つしかないため、これがフォーム認証のバグである可能性はないと思います。
問題はSKA Cookieのようです.AFAIKはフォーム認証とは何の関係もなく、すべてバニラSSRSと関係があります.
この理由として私が見ることができる他の唯一のことは、web.config ファイルのフォーム認証セクションに入力したフォーム認証クッキーのタイムアウトを 720 分に変更したことです。
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="720" path="/">
</forms>
</authentication>
セッションキープアライブ Cookie によるフラッディングを防ぐために何ができるか知っている人はいますか (これらの Cookie を手動で削除する場合を除く)。
非常に煩わしいことを除けば、それ自体は問題ありませんが、ユーザーはおそらくそれをあまり理解していないため、問題になるでしょう...