Я включил SQL-Server Reporting Services 2012 (SSRS 2012) для создания аутентификации, чтобы мы могли использовать ее через Интернет.
Я не смог найти образец проверки подлинности форм для SSRS 2012 в любом месте, поэтому мне пришлось взять SSRS 2008R2 один и адаптировать его для 2012 года для Single-Sign-On (SSO).
В этот момент все, казалось, работало так, как ожидалось; Мне даже удалось заставить SSO работать через домены.
Но теперь у меня есть проблема:
Я тестировал все отчеты (более 200) в Google Chrome, потому что мне пришлось вставить немного JavaScript, который изменяет размер границы td, так как HTML отображается прямо в не-IE5-QuirksMode. После примерно 50-го доклада я неожиданно получил:
"HTTP 400 Bad Request - Request Too Long"
После этого я не смог просмотреть какой-либо другой отчет, даже те, которые ранее работали.
Проблема, похоже, вызвана слишком большим количеством файлов cookie, и действительно, когда я удалил несколько файлов cookie "* _SKA" (Session Keep Alive?), он снова начал работать.
Теперь моя проблема заключается в том, что я не знаю, что вызывает это "переполнение cookie". Я также не знаю, если это ошибка в Chrome, ошибка в ванильном 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", поэтому я не думаю, что это может быть ошибка проверки подлинности форм.
Проблема заключается в том, что cookie SKA, что AFAIK не имеет никакого отношения к проверке подлинности форм и всему, что связано с Vanilla SSRS.
Единственное, что я вижу в качестве причины для этого, - это изменение тайм-аута cookie forms-authentication-cookie до 720 минут, которое я ввел в раздел проверки подлинности форм в файле web.config.
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="720" path="/">
</forms>
</authentication>
Кто-нибудь знает, что я могу сделать, чтобы предотвратить наводнение кукисами Keep Keep-Alive (за исключением удаления этих файлов вручную)?
Это не проблема для меня сама по себе, кроме того, что она очень раздражает, но это будет проблемой, потому что пользователи, вероятно, не будут очень разбираться в этом...