Проверка подлинности в службах 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 для передачи билета проверки подлинности (называемого куки-файлом) с сервера на клиент для проверяемых запросов входа в систему.
На следующем рисунке представлен метод проверки подлинности пользователей в веб-службе, где приложение развернуто на сервере отчетов, настроенном для использования нестандартного модуля проверки подлинности.
На рис. 1 процесс проверки подлинности представлен следующим образом.
Клиентское приложение вызывает метод LogonUser веб-службы для проверки подлинности пользователя.
Веб-служба вызывает LogonUser метод расширения безопасности, в частности класс, реализующий IAuthenticationExtension.
Реализация метода LogonUser проверяет имя пользователя и пароль в хранилище пользователей или в центре безопасности.
После успешной проверки подлинности веб-служба создает куки-файл и управляет им в ходе сеанса.
Веб-служба возвращает билет проверки подлинности в вызывающее приложение с помощью заголовка 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 не поддерживают одновременное использование нескольких модулей безопасности.