Авторизация в службах Reporting Services

Авторизация является процессом определения, должен ли быть предоставлен идентификатору запрошенный тип доступа к конкретному ресурсу в базе данных сервера отчета. Службы Reporting Services использует архитектуру авторизации на основе ролей, которая предоставляет пользователю доступ к конкретному ресурсу на основании назначения ролей пользователя для приложения. Модули безопасности для служб Reporting Services содержат реализацию компонента авторизации, который используется для предоставления доступа пользователям после прохождения ими проверки подлинности на сервере отчетов. Авторизация вызывается, когда пользователь пытается выполнить операцию в системе или на элементе сервера через API-интерфейс SOAP и посредством доступа по URL-адресу. Это стало возможным благодаря интерфейсу модуля безопасности IAuthorizationExtension. Как указывалось выше, все развертываемые модули наследуют от базового интерфейса IExtension. IExtension и IAuthorizationExtension являются членами пространства имен Microsoft.ReportingServices.Interfaces.

Проверка доступа

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

// Overload for Folder operationspublic bool CheckAccess(   string userName,    IntPtr userToken,    byte[] secDesc,    FolderOperation requiredOperation){   // If the user is the administrator, allow unrestricted access.   if (userName == m_adminUserName)       return true;   AceCollection acl = DeserializeAcl(secDesc);   foreach(AceStruct ace in acl)   {         if (userName == ace.PrincipalName)         {            foreach(FolderOperation aclOperation in                ace.FolderOperations)            {               if (aclOperation == requiredOperation)                     return true;            }         }   }   return false;}

Сервер отчетов вызывает метод CheckAccess, передавая имя зарегистрированного пользователя, маркер пользователя, дескриптор безопасности для элемента и запрошенную операцию. Здесь проводится проверка дескриптора безопасности для имени пользователя и наличия должного разрешения на выполнение запроса, в результате чего возвращается true для указания, что доступ предоставлен или false для указания, что в доступе отказано.

Дескрипторы безопасности

При установке политики авторизации на элементах в базе данных сервера отчетов, клиентское приложение (такое как диспетчер отчетов) передает сведения о пользователе в модуль безопасности вместе с политикой безопасности для элемента. Эта политика безопасности и сведения о пользователе вместе называются дескриптором безопасности. Дескриптор безопасности содержит следующие сведения для элемента в базе данных сервера отчетов:

  • группа или пользователь, имеющие некоторый тип разрешений на выполнение операций с элементом;

  • тип элемента;

  • список управления доступом к элементу.

Дескрипторы безопасности создаются при помощи методов SetPolicies и SetSystemPolicies веб-службы.

Поток авторизации

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

Поток авторизации служб Reporting Services

Как показано на этой диаграмме, авторизация выполняется в следующей последовательности.

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

  2. Перед любой проверкой доступа проводится проверка файла cookie.

  3. После проверки файла cookie сервер отчетов вызывает GetUserInfo и пользователю дается идентификатор.

  4. Пользователь пытается выполнить операцию с использованием веб-службы Reporting Services.

  5. Сервер отчетов вызывает метод CheckAccess.

  6. Дескриптор безопасности получается и передается пользовательской реализации модуля безопасности CheckAccess. В этот момент пользователь, группа или компьютер сравниваются с дескриптором безопасности элемента, к которому выполняется доступ, и они авторизуются для выполнения запрошенной операции.

  7. Если пользователь авторизован, веб-служба выполняет запрашиваемую операцию и возвращает ответ вызывающему приложению.