Поделиться через


Проверка подлинности в службах Reporting Services

Проверка подлинности — это процесс определения прав пользователя на удостоверение. Для проверки подлинности пользователя применяется много методов. Самым распространенным является использование паролей. Например, во время реализации проверки подлинности с помощью форм необходима реализация, которая запрашивает у пользователей учетные данные (обычно посредством интерфейса, в который вводятся имя и пароль), а затем проверяет пользователей по хранилищу данных, которым может быть таблица база данных или файл конфигурации. Если не удается проверить учетные данные, то процесс проверки подлинности завершается неуспешно, и для пользователя принимается анонимное удостоверение.

Нестандартная проверка подлинности в службах Reporting Services

Операционная система Windows в службах Reporting Services проводит проверку подлинности пользователей с помощью встроенной безопасности Windows или путем явного получения и проверки учетных данных пользователя. В службах Reporting Services можно разработать нестандартную проверку подлинности, чтобы обеспечить поддержку дополнительных схем проверки подлинности. Это возможно с помощью интерфейса модуля безопасности IAuthenticationExtension. Все модули, развертываемые и используемые на сервере отчетов, наследуют базовый интерфейс IExtension. Интерфейсы IExtension и IAuthenticationExtension входят в пространство имен Microsoft.ReportingServices.Interfaces.

Основным способом проверки подлинности на сервере отчетов в службах Reporting Services служит метод LogonUser. Этот элемент веб-службы Reporting Services можно использовать для передачи учетных данных пользователя на сервер отчетов для проверки. В базовом модуле безопасности реализован метод IAuthenticationExtension.LogonUser, который содержит код нестандартной проверки подлинности. В образце проверки подлинности с помощью форм метод LogonUser выполняет проверку подлинности по переданным учетным данным и хранилищу пользователя в базе данных. Пример реализации метода LogonUser имеет следующий вид:

public bool LogonUser(string userName, string password, string authority){   return AuthenticationUtilities.VerifyPassword(userName, password);}

Следующий образец функции используется для проверки переданных учетных данных:

internal static bool VerifyPassword(string suppliedUserName,   string suppliedPassword){    bool passwordMatch = false;   // Get the salt and pwd from the database based on the user name.   // See "How To: Use DPAPI (Machine Store) from ASP.NET," "How To:   // Use DPAPI (User Store) from Enterprise Services," and "How To:   // Create a DPAPI Library" for more information about how to use   // DPAPI to securely store connection strings.   SqlConnection conn = new SqlConnection(      "Server=localhost;" +       "Integrated Security=SSPI;" +      "database=UserAccounts");   SqlCommand cmd = new SqlCommand("LookupUser", conn);   cmd.CommandType = CommandType.StoredProcedure;   SqlParameter sqlParam = cmd.Parameters.Add("@userName",       SqlDbType.VarChar,       255);   sqlParam.Value = suppliedUserName;   try   {      conn.Open();      SqlDataReader reader = cmd.ExecuteReader();      reader.Read(); // Advance to the one and only row      // Return output parameters from returned data stream      string dbPasswordHash = reader.GetString(0);      string salt = reader.GetString(1);      reader.Close();      // Now take the salt and the password entered by the user      // and concatenate them together.      string passwordAndSalt = String.Concat(suppliedPassword, salt);      // Now hash them      string hashedPasswordAndSalt =         FormsAuthentication.HashPasswordForStoringInConfigFile(         passwordAndSalt,         "SHA1");      // Now verify them. Returns true if they are equal.      passwordMatch = hashedPasswordAndSalt.Equals(dbPasswordHash);   }   catch (Exception ex)   {       throw new Exception("Exception verifying password. " +          ex.Message);   }   finally   {       conn.Close();   }   return passwordMatch;}

Поток проверки подлинности

Веб-служба Reporting Services предоставляет нестандартные модули проверки подлинности, позволяющие реализовать проверку подлинности с помощью форм в диспетчере отчетов и на сервере отчетов.

Метод LogonUser веб-службы Reporting Services позволяет отправлять учетные данные на сервер отчетов для проверки подлинности. Веб-служба использует заголовки HTTP для передачи билета проверки подлинности (называемого файлом Cookie) с сервера на клиент для проверяемых запросов входа.

На следующем рисунке представлен метод проверки подлинности пользователей в веб-службе, когда приложение развернуто на сервере отчетов, настроенном для использования нестандартного модуля проверки подлинности.

Поток проверки подлинности служб Reporting Services

На рис. 1 процесс проверки подлинности представлен следующим образом:

  1. Клиентское приложение вызывает метод LogonUser веб-службы для проверки подлинности пользователя.

  2. Веб-служба вызывает метод LogonUser в модуле безопасности, а именно в классе, где реализован интерфейс IAuthenticationExtension.

  3. Реализация метода LogonUser проверяет имя пользователя и пароль в хранилище пользователе или в центре безопасности.

  4. После успешной проверки подлинности веб-служба создает файл Cookie и управляет им в ходе сеанса.

  5. Веб-служба возвращает билет проверки подлинности в вызывающее приложение с помощью заголовка HTTP.

В ходе успешной проверки подлинности пользователя с помощью модуля безопасности веб-служба создает файл Cookie, который используется для последующих запросов. Файл Cookie не может сохраняться в пользовательском центре безопасности, поскольку сервер отчетов не владеет центром безопасности. Файл Cookie возвращается из метода веб-службы LogonUser и используется в последующих вызовах метода веб-службы и при доступе по URL-адресу.

ПримечаниеПримечание

Чтобы предотвратить несанкционированный доступ к файлу Cookie во время передачи, такие файлы, возвращаемые методом LogonUser, должны передавать защищенным образом с применением шифрования SSL.

Во время доступа к серверу отчетов по URL-адресу, когда установлен настраиваемый модуль безопасности, службы IIS и ASP.NET автоматически управляют передачей билета проверки подлинности. Если доступ к серверу отчетов выполняется через API-интерфейс SOAP, в реализацию класса-посредника необходимо включить поддержку для управления билетом проверки подлинности. Дополнительные сведения об использовании API-интерфейса SOAP и управлении билетом проверки подлинности см. в разделе «Использование веб-служб с пользовательской безопасностью».

Проверка подлинности с помощью форм

Проверка подлинности с помощью форм — это тип проверки подлинности ASP.NET, в котором пользователь, не прошедший проверку, направляется в HTML-форму. Когда пользователь предоставляет учетные данные, система создает файл Cookie, содержащий билет проверки подлинности. При последующих запросах система сначала проверяет файл Cookie, чтобы определить, прошел ли пользователь проверку подлинности на сервере отчетов.

Можно расширить службы Reporting Services для поддержки проверки подлинности с помощью форм, используя интерфейсы расширения системы безопасности, доступные в API-интерфейсе служб Reporting Services. В случае расширения служб Reporting Services для использования проверки подлинности с помощью форм используйте для всех каналов связи с сервером отчетов протокол SSL, чтобы предотвратить возможность доступа злоумышленника к файлу Cookie другого пользователя. Протокол SSL позволяет клиентам и серверу отчетов проверять подлинность друг друга и обеспечивать невозможность считывания содержимого, передаваемого между двумя компьютерами, с других компьютеров. Все данные, отправляемые с клиента по SSL-соединению, шифруются, чтобы исключить возможность перехвата злоумышленником паролей или данных, отправляемых на сервер отчетов.

Проверка подлинности с помощью форм обычно реализуется для поддержки учетных записей и проверки подлинности на платформах, отличных от Windows. Для пользователя, запрашивающего доступ к серверу отчетов, выводится графический интерфейс, а введенные учетные данные отправляются в центр безопасности для проверки подлинности.

Для проверки подлинности с помощью форм необходимо присутствие пользователя, вводящего учетные данные. Для приложений, которые работают в автоматическом режиме и связываются непосредственно с веб-службами Reporting Services, проверку подлинности с помощью форм необходимо сочетать с нестандартной схемой проверки подлинности.

Использование проверки подлинности с помощью форм в службах Reporting Services разумно в следующих случаях.

  • Необходимо сохранять и проверять подлинность пользователей, не обладающих учетными записями Microsoft Windows.

  • Необходимо предоставлять собственную форму пользовательского интерфейса в виде страницы входа между различными страницами на веб-узле.

При создании настраиваемого модуля безопасности, поддерживающего проверку подлинности с помощью форм, учитывайте следующие факторы.

  • Если используется проверка подлинности с помощью форм, для виртуального каталога сервера отчетов в службах IIS необходимо включить анонимный доступ.

  • Для ASP.NET необходимо установить проверку подлинности с помощью форм. Проверка подлинности ASP.NET настраивается в файле Web.config для сервера отчетов.

  • Службы Reporting Services могут проверять подлинность и проводить авторизацию пользователей с помощью проверки подлинности Windows или нестандартной проверки подлинности, но оба метода не могут использоваться одновременно. Службы Reporting Services не поддерживают одновременное использование нескольких модулей безопасности.

См. также

Основные понятия