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

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

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

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

Основным способом проверки подлинности на сервере отчетов в службах Reporting Services служит метод LogonUser. Этот элемент веб-службы Reporting Services можно использовать для передачи учетных данных пользователя на сервер отчетов для проверки. Пользовательский базовый модуль безопасности реализует метод IAuthenticationExtension2.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) с сервера клиенту для проверенных запросов на вход.

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

Screenshot of the Reporting Services security authentication flow.

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

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

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

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

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

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

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

Примечание.

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

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

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

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

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

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

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

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

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

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

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

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

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

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