Как обойти это исключение аутентификации SSRS? - PullRequest
4 голосов
/ 10 марта 2011

Я пытаюсь внедрить некоторый пользовательский код безопасности в SSRS 2008 (не R2), чтобы разрешить проверку подлинности с помощью форм вместо проверки подлинности Windows.Я основал свое решение на примере кода Microsoft и сумел добиться того, чтобы большая часть его работала абсолютно нормально.Единственная область, в которой у меня возникают проблемы, - это вход по фактическому URL-адресу диспетчера отчетов.

Проблема 1 При использовании URL-адреса http://localhost/Reports_MSSQL2008/ он не принимает UILogon.aspxстраницу, которую я скопировал в папку /Pages (как указано в примере Microsoft).Я изменил файл web.config в папке ReportManager, чтобы он содержал следующее:

<authentication mode="Forms">
  <forms loginUrl="UILogon.aspx" 
         name="sqlAuthCookie" 
         timeout="60" 
         slidingExpiration="true" 
         path="/" />
</authentication>

Я попытался изменить путь, чтобы он совпадал с точным путем к файлу aspx, но все еще не радует !!

Выпуск 2 Из-за проблемы, описанной выше, я попытался просто войти в UILogon и ReportManager через URL, http://localhost/Reports_MSSQL2008/Pages/UILogon.aspx.Это работает в том, что я получаю доступ к своему пользовательскому коду (UILogon.aspx.cs и IAuthorisation / IAuthentication code) и вижу, что он делает следующее:

  • аутентификация / авторизация пользователя
  • создание файла cookie
  • хранение файла cookie (sqlAuthCookie) в контейнере cookie ответа / запроса
  • выполнение response.redirect на странице /Folder.aspx

Проблема в том, что когда response.redirect возвращается в метод GetUserInfo (), HttpContext.Current.User имеет значение null, и cookie больше не существует.Из-за этого возвращается нулевое значение IIdentity (не может установить его для чего-либо еще !!), и SSRS выдает ошибку ...

Microsoft.ReportingServices.Diagnostics.Utilities.AuthenticationExtensionException:
Расширение проверки подлинности выдало непредвиденное исключение или вернуло недопустимое значение: identity == null.

Для информации - при запуске Report Builder / Visual Studio bi proj / URL-адреса веб-службы выполняется точночто мне нужно и работает нормально ...... это просто диспетчер отчетов, который вызывает проблему.

1 Ответ

4 голосов
/ 10 марта 2011

Я теперь решил это .... Мне пришлось добавить следующее в rsreportserver.config:

<UI>
    <CustomAuthenticationUI>
        <loginUrl>/Pages/UILogon.aspx</loginUrl>
    <UseSSL>false</UseSSL> 
    </CustomAuthenticationUI>
    <ReportServerUrl></ReportServerUrl>
    <PageCountMode>Estimate</PageCountMode>
</UI>

и иметь только следующее в web.config:

<authentication mode="Forms" />

Кроме того, для защиты от нулевой идентичности, передаваемой обратно из GetUserInfo (), я кодировал следующее:

public void GetUserInfo(out IIdentity userIdentity, out IntPtr userId)
{
    //default the userIdentity
    userIdentity = new GenericIdentity(WindowsIdentity.GetCurrent().Name);

    // If the current user identity is not null,
    // set the userIdentity parameter to that of the current user 
    if (HttpContext.Current != null
          && HttpContext.Current.User != null)
    {
        userIdentity = HttpContext.Current.User.Identity;
    }

    // initialize a pointer to the current user id to zero
    userId = IntPtr.Zero;
}
...