LightSwitch 的安全注意事项

大多数业务应用程序具有的安全要求。 例如,您可能希望的限制的员工有权访问应用程序,或者到屏幕,在应用程序中,以及哪些用户可以查看或更新某些数据。 LightSwitch提供了内置的身份验证和授权模型,可帮助您在您的应用程序中实现安全性。

身份验证和授权

身份验证是一种机制来验证用户是谁。 例如,当您登录到 Windows 时,您的用户名和密码进行身份验证您实际上是您。 授权是一种机制,用于定义您可以 – 或不能 –。 例如,员工可以查看自己的工资单信息,但它们很可能会将未被授权使收款人提升自己。

在 LightSwitch,身份验证由用来标识用户的登录屏幕。 角色和权限的用户进行身份验证,一旦确定该用户有权执行应用程序中。

启用身份验证

在身份验证LightSwitch禁用默认设置。 在上启用访问控制应用程序设计器选项卡。 支持 Windows 身份验证和窗体的身份验证。 Windows 身份验证使用的用户的 Windows 登录信息来识别用户。 使用窗体身份验证时,应用程序管理员创建的用户身份和密码。

在选择 Windows 身份验证时,您还可以选择特定用户或所有 Windows 用户是否有权访问应用程序。 如果您选择的所有用户,具有有效的 Windows 登录标识任何用户都将能够访问该应用程序,但他们只授权的最小权限。 您也可以将角色和权限与单个用户根据需要。

权限、 用户和角色

在授权LightSwitch通过定义权限、 用户和角色来实现。 由开发人员在创建权限访问控制通过编写代码而设计的应用程序设计器选项卡以及这些权限的效果。 例如,您可以创建 ViewSales 的权限授权用户查看销售屏幕。 在CanView方法的屏幕,您要编写的代码,仅允许屏幕将显示当前用户是否已被授予权限以查看它。 除了设置权限以查看屏幕,还可以创建权限来限制对单个控件在屏幕上,数据实体或实体,查询及其他字段的访问。

部署应用程序后,应用程序管理员将创建角色。 角色包含一个或多个权限。 例如,管理员可能定义销售代表角色,并将 ViewSales 权限分配给该角色。 应用程序管理员还将添加用户并将角色分配给用户。 例如,如果 Bob 销售部门中,管理员可能会作为用户添加 Bob,加上他的身份验证信息,并再为他分配了销售代表角色。 应用程序运行时,代码将评估王俊元的用户信息、 看到他中了销售代表角色的成员并显示菜单项以显示销售屏幕。

每个应用程序都有一个默认权限, SecurityAdministration 的权限。 此权限授予访问权限用户角色所使用的应用程序管理员管理屏幕。 在发布时的第一次应用程序,您可以提供将成为默认应用程序管理员的人员的身份验证信息。 当他第一次运行应用程序时,他们将能够看到用户角色屏幕,然后定义用户和角色。

测试授权

测试应用程序时,要确保您定义的任何权限按预期方式工作。 通过在中启用调试的权限执行此操作访问控制应用程序设计器选项卡。 例如,如果您定义了一个 ViewSales 的权限,您可以检查授予调试的对该权限的复选框。 调试应用程序时,您可以验证您可以查看销售屏幕 — 您作为具有 ViewSales 权限的用户身份运行。 您可以设置权限以模拟可能会指定给特定角色的权限的任意组合。

备注

如果您启用 SecurityAdministration 权限以进行调试,您可以查看管理用户角色屏幕,在调试时。在这些屏幕中,您可以输入用户和角色,用户和角色就不会与应用程序一起部署,并不能用于调试的权限。

安全连接

三层客户端应用程序是基于LightSwitch和承载运行 Internet Information Services (IIS) 服务器上,应用程序和服务器之间的通信使用 HTTP 协议而不是更安全 HTTPS 协议。 这一要求可以保留您的应用程序容易受到攻击。 安全套接字层 (SSL) 加密可帮助保护客户端应用程序和服务器之间发送的保密信息或个人信息。 当启用了 SSL 时,远程客户端应用程序使用访问服务器以 https:// 开头的 Url。 我们建议您承载应用程序所基于的所有网站配置 SSL LightSwitch. 有关详细信息,请参阅在 IIS 7 配置安全套接字层

若要启用 SSL

  1. 在菜单栏中,选择生成发布

  2. 发布应用程序向导,选择 安全设置选项卡。

  3. 要求安全连接 (HTTPS) 部分中,选择选项按钮。

    备注

    打开该设置时,该网站必须正确配置为使用 HTTPS。

对于三层应用程序的数据层使用 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 客户端应用程序中启用身份验证

其他资源

部署:分发和维护应用程序

调试:查找和修复错误