Проверка подлинности в службах 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 для передачи билета проверки подлинности (называемого куки-файлом) с сервера на клиент для проверяемых запросов входа в систему.

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

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

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

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

  2. Веб-служба вызывает LogonUser метод расширения безопасности, в частности класс, реализующий IAuthenticationExtension.

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

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

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

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

Примечание

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

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

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

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

Можно расширить службы 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 не поддерживают одновременное использование нескольких модулей безопасности.

См. также:

Реализация модуля безопасности