Вопросы безопасности LightSwitch
В большинстве бизнес-приложений имеются требования к безопасности. Так, вам может потребоваться ограничить доступ определенных сотрудников к приложению или к различным экранам в приложении, а также просмотр или обновление определенных данных. В LightSwitch имеется встроенная модель аутентификации и авторизации, которая помогает реализовать безопасность в приложении.
Аутентификация и авторизация
Аутентификация — это механизм для установления личности пользователя. Например, при входе в Windows личность пользователя подтверждается с помощью имени пользователя и пароля. Авторизация — это механизм для определения доступности функций. Например, сотрудникам может быть разрешено просматривать сведения о своей заработной плате, но едва ли им предоставят возможность поднимать себе оклад.
В LightSwitch управление аутентификацией осуществляется на экране входа, который используется для идентификации пользователя. Когда пользователь прошел аутентификацию, доступные ему действия в приложении определяются ролями и разрешениями.
Включение аутентификации
Аутентификация в LightSwitch по умолчанию отключена; она включается на вкладке Управление доступом конструктора приложений. Поддерживается как аутентификация Windows, так и аутентификация с помощью форм. При аутентификации Windows для идентификации пользователя используются сведения для входа в Windows. Если используется аутентификация с помощью форм, идентификаторы и пароли пользователей создает администратор приложения.
При выборе аутентификации Windows можно также указать, кому будет доступно приложение — всем пользователям Windows или конкретной группе пользователей. Если выбрать всех пользователей, то любой пользователь с действительным идентификатором для входа в Windows получит доступ к приложению, однако с минимальными разрешениями. По мере необходимости также можно назначать роли и разрешения конкретным пользователям.
Разрешения, пользователи и роли
Авторизация в LightSwitch выполняется с помощью определения разрешений, пользователей и ролей. Разрешения создаются разработчиком на вкладке Управление доступом конструктора приложений; их влияние определяется при помощи кода. Например, можно создать разрешение ViewSales, чтобы разрешить пользователям просматривать экран "Продажи". В методе CanView для экрана можно написать код, который разрешает отображение экрана только в том случае, если текущему пользователю были предоставлены разрешения на его просмотр. Можно не только настраивать разрешения для просмотра экранов, но и создавать разрешения для ограничения доступа к отдельным элементам управления на экране, сущностям данных или полям сущностей, запросам и многому другому.
Роли создаются администратором приложения после его развертывания. Роль содержит одно или несколько разрешений. Например, администратор может определить роль "Продажи" и назначить ей разрешение ViewSales. Администратор приложения также добавляет пользователей и назначает им роли. Например, если Сергей работает в отделе продаж, администратор может добавить его в качестве пользователя, создав для него данные для аутентификации, а затем назначить ему роль "Продажи". При выполнении приложения код оценивает сведения о пользователе Сергее, устанавливает его членство в роли "Продажи" и выводит пункт меню для отображения на экране "Продажи".
В каждом приложении имеется разрешение по умолчанию — SecurityAdministration. Это разрешение предоставляет доступ к экранам администрирования Пользователи и Роли, которые используются администратором приложения. При первоначальной публикации приложения можно предоставить сведения об аутентификации для лица, которое будет администратором приложения по умолчанию. Когда этот пользователь запускает приложение в первый раз, он получает доступ к экранам Пользователи и Роли и может определить пользователей и роли.
Тестирование авторизации
При тестировании приложения следует убедиться, что все определенные разрешения действуют так, как ожидалось. Для этого следует перейти на вкладку Управление доступом конструктора приложений и включить отладку разрешений. Например, если определено разрешение ViewSales, для него можно установить флажок Предоставлено для отладки. При отладке приложения можно проверить доступность экрана "Продажи" – работа ведется под учетной записью пользователя с разрешением ViewSales. Можно задать любую комбинацию разрешений для эмуляции разрешений, которые могут быть назначены конкретной роли.
Примечание
Если включена отладка разрешений SecurityAdministration, то во время отладки можно просматривать экраны администрирования Пользователи и Роли.Хотя на этих экранах можно добавлять пользователей и роли, эти пользователи и роли не будут развернуты в приложении и не могут использоваться для отладки разрешений.
Безопасные подключения
Для 3-уровневых клиентских приложений, основанных на LightSwitch и размещенных на сервере с работающими службами IIS, при взаимодействии между приложением и сервером используется протокол HTTP вместо более безопасного протокола HTTPS. Это требование может сделать приложение уязвимым для злоумышленников. Шифрование SSL позволяет защитить конфиденциальные или персональные данные, которые передаются между клиентским приложением и сервером. Если протокол SSL включен, удаленные клиентские приложения получают доступ к серверу с помощью URL-адресов, начинающихся с префикса https://. Рекомендуется настраивать SSL для любого сайта, на котором размещено приложение, основанное на LightSwitch. Дополнительные сведения см. в статье Настройка протокола SSL в IIS 7.
Включение SSL
В строке меню выберите Сборка, Опубликовать.
В Мастере публикации приложения выберите вкладку Параметры безопасности.
В разделе Требовать безопасного подключения (HTTPS) выберите переключатель Вкл.
Примечание
Если этот параметр включен, веб-сайт должен быть соответствующим образом настроен для использования протокола HTTPS.
Для 3-уровневых приложений, в которых используется SQL Server на уровне данных, связь между службами IIS и базой данных также является потенциально уязвимой. Рекомендуется настроить протокол SSL для любой базы данных, к которой обращается приложение, основанное на LightSwitch. Дополнительные сведения в разделе в статье Шифрование соединений с SQL Server.
Безопасность и управление версиями
При работе с проектом LightSwitch, который подключен к системе управления версиями, строка подключения в файле web.config может содержать имя пользователя и пароль последнего разработчика проекта. В дальнейшем эти данные могут быть доступны следующему разработчику, извлекающему проект.
Данная проблема не относится к опубликованному приложению; информацию о строке подключения из Мастера публикации не сохраняется в системе управления версиями. Использование тестовой базы данных вместо рабочей во время разработки позволяет предотвратить доступ неавторизованных пользователей к рабочей базе данных.
Дополнительные вопросы безопасности
Помимо аутентификации следует учитывать и другие аспекты безопасности. Даже если приложение не использует конфиденциальные бизнес-данные, возможен риск раскрытия других сведений, например паролей.
Вопросы безопасности также следует учитывать при создании кода, который обращается к серверу. Например, можно создать код запроса для фильтрации данных сотрудников таким образом, чтобы сотрудники могли видеть только свои собственные данные:
Private Partial Sub Employees_All_PreprocessQuery(ByRef query As IQueryable(Of Application43.Employee))
query = From item In query Where item.EmpName = Me.Application.User.Nameitem
End Sub
partial void Employees_All_PreprocessQuery(ref IQueryable<Application43.Employee> query)
{
query = from item in query where item.EmpName == this.Application.User.Name select item;
}
Хотя этот способ подходит для отображения данных, если при попытке пользователя обновить или удалить данные возникает исключение параллелизма, данные других сотрудников могут быть включены в сведения об ошибке, возвращаемые с сервера. Чтобы избежать этого, требуется написать дополнительный код в методах обновления и удаления, чтобы сотрудник мог просматривать только свои собственные данные:
Dim user As String = Me.Application.User.Name
If Me.DataWorkspace.ApplicationData.Employees.Where(Function(e) e.Id = entity.Id AndAlso e.EmpName = user).Execute().Count() = 0 Then
Throw New DataServiceOperationException("Permission error: Cannot modify a record you don't have access to.")
End If
string user = this.Application.User.Name;
if (this.DataWorkspace.ApplicationData.Employees.Where(e => e.Id == entity.Id && e.EmpName == user).Execute().Count() == 0)
{
throw new DataServiceOperationException("Permission error: Cannot modify a record you don't have access to.");
}
Чтобы узнать больше о методах создания безопасного кода в целом, см. статью Создание безопасных приложений.
См. также
Задачи
Практическое руководство. Включение аутентификации в клиентском приложении Silverlight
Другие ресурсы
Развертывание: распространение приложения и его обслуживание