Элемент управления ReportViewer с использованием ReportServerCredentials.NetworkCredentials - PullRequest
0 голосов
/ 19 марта 2012

Я использую элемент управления ReportViewer для доступа к отчету SSRS 2008 из веб-приложения VS2010 ASP.NET MVC 2, развернутого на IIS7 со следующей настройкой:

  1. Проверка подлинности с помощью форм и анонимная проверка подлинности включены
  2. Олицетворение ASP.NET отключено
  3. Удостоверение пула приложений, настроенное для использования локальной учетной записи пользователя с правами доступа к определенным папкам на сервере, требуемым приложением
  4. Веб-сервер не является частьюдомена, но сервер SSRS находится в домене

Поскольку мне нужно использовать отдельные учетные данные для доступа к отчетам SSRS, я реализовал IReportServerCredentials, как описано здесь:

http://msdn.microsoft.com/en-us/library/microsoft.reporting.webforms.ireportservercredentials(v=vs.100).aspx

Проблема, с которой я сталкиваюсь, заключается в том, что она всегда идет к IReportServerCredentials.ImpersonationUser вместо IReportServerCredentials.NetworkCredentials, куда мне это нужно, потому что я получаю необходимые учетные данные из web.config.

Может бытьЯ упускаю что-то простое здесь, но я пробовал разныеСочетание этих настроек и не повезло.Любые указатели на то, как я могу получить эту работу, будут очень благодарны!

Мой код:

[Serializable]
public sealed class MyReportServerCredentials : 
    IReportServerCredentials
{
    public WindowsIdentity ImpersonationUser
    {
        get
        {
            // Use the default Windows user.  Credentials will be
            // provided by the NetworkCredentials property.
            return null;
        }
    }

    public ICredentials NetworkCredentials
    {
        get
        {
            // Read the user information from the Web.config file.  
            // By reading the information on demand instead of 
            // storing it, the credentials will not be stored in 
            // session, reducing the vulnerable surface area to the
            // Web.config file, which can be secured with an ACL.

            // User name
            string userName = 
                ConfigurationManager.AppSettings
                    ["MyReportViewerUser"];

            if (string.IsNullOrEmpty(userName))
                throw new Exception(
                    "Missing user name from web.config file");

            // Password
            string password = 
                ConfigurationManager.AppSettings
                    ["MyReportViewerPassword"];

            if (string.IsNullOrEmpty(password))
                throw new Exception(
                    "Missing password from web.config file");

            // Domain
            string domain = 
                ConfigurationManager.AppSettings
                    ["MyReportViewerDomain"];

            if (string.IsNullOrEmpty(domain))
                throw new Exception(
                    "Missing domain from web.config file");

            return new NetworkCredential(userName, password, domain);
        }
    }

    public bool GetFormsCredentials(out Cookie authCookie, 
                out string userName, out string password, 
                out string authority)
    {
        authCookie = null;
        userName = null;
        password = null;
        authority = null;

        // Not using form credentials
        return false;
    }
}


this.MyReportView.ServerReport.ReportServerCredentials = new MyReportServerCredentials();

Спасибо

1 Ответ

1 голос
/ 20 марта 2012

Я реализую этот же класс на каждой странице отчетов, которая мне нужна, и она работает правильно.

Проверьте файл web.config.

У меня есть:

<configuration>
<system.web>
<authentication mode="Windows"/>
</configuration>
</system.web>

Да. Режим аутентификации «Windows».

Однако я также работал с использованием проверки подлинности с помощью форм.

Так что я думаю, что это больше проблема с разрешениями.

Проверьте это сообщение:

UAC Windows 7 (Профессиональная) 64 бит и SSRS 2008 R2 (10.50.1617) 64 бит

Также этот пост:

Reporting Services 2008: запрос имени пользователя и пароля

...