LightSwitch 的安全注意事项

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

身份验证和授权

身份验证是一种用来验证用户身份的机制。 例如,当您登录到 Windows,您的用户名称和密码会验证您是否真的是您。 授权是一种用来确定您的可以做或不可以做的事情的机制。 例如,雇员也许可以查看自己的工资单信息,但他们很可能会无权给自己加薪。

在 LightSwitch 中,身份验证由用于标识用户的登录屏幕处理。 一旦用户进行身份验证,角色和权限就会确定该用户在该应用程序中所具有的权限。

Gg481776.collapse_all(zh-cn,VS.110).gif启用身份验证

LightSwitch 中的身份验证在默认情况下被禁用;您可以在应用程序设计器的**“访问控制”**选项卡上将其启用。 支持 Windows 身份验证和窗体的身份验证。 Windows 身份验证使用用户的 Windows 登录信息对用户进行标识。 使用窗体身份验证时,应用程序管理员会创建用户标识和密码。

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

Gg481776.collapse_all(zh-cn,VS.110).gif权限、用户和角色

LightSwitch 中的授权通过定义权限、用户和角色完成。 权限由开发人员在应用程序设计器的**“访问控制”**选项卡上进行创建,而这些权限的影响则通过编写代码进行设计。 例如,您可以创建 ViewSales 权限,以授权用户查看销售屏幕。 在屏幕的 CanView 方法中,您会编写只允许屏幕在当前用户已被授权查看该屏幕时显示的代码。 除了设置查看屏幕的权限,您还可以创建对屏幕上单个控件、实体的数据实体或字段、查询的访问权限以及更多权限。

角色由应用程序管理员在该应用程序部署后进行创建。 角色包含一个或多个权限。 例如,管理员可能定义销售角色,并将 ViewSales 权限分配给该角色。 应用程序管理员还会添加用户,并将角色分配给用户。 例如,如果 Bob 属于销售部门,则管理员可能通过添加他的身份验证信息将 Bob 添加为用户,然后将销售角色分配给 Bob。 当应用程序运行时,代码会评估 Bob 的用户信息、检查他是否为销售角色的成员,并显示菜单项以显示销售屏幕。

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

Gg481776.collapse_all(zh-cn,VS.110).gif测试授权

测试应用程序时,您需要确保您定义的任何权限按预期方式工作。 可通过在应用程序设计器的**“访问控制”选项卡上启用调试权限来执行此操作。 例如,如果您定义了一个 ViewSales 的权限,则可以选中该权限的“授予调试”**复选框。 当您调试应用程序时,可以验证您是否可以查看销售屏幕 - 您正已具有 ViewSales 权限的用户身份运行。 您可以设置任意组合的权限,以模拟可能分配给给定角色的权限。

备注

如果您启用 SecurityAdministration 权限用以调试,则可以在调试期间查看管理 “用户”“角色”屏幕。虽然您可以在这些屏幕中输入用户和角色,但这些用户和角色将不会使用应用程序进行部署,并且不能用于调试权限。

Gg481776.collapse_all(zh-cn,VS.110).gif安全连接

对于基于 LightSwitch 的并且宿主在运行 Internet Information Services (IIS) 的服务器上的三层客户端应用程序,该应用程序与该服务器之间的通信使用 HTTP 协议而不是更安全的 HTTPS 协议。 这要求会使您的应用程序容易受到攻击。 安全套接字层 (SSL) 加密有助于保护在客户端应用程序和服务器之间发送的机密或个人信息。 启用 SSL 时,远程客户端应用程序可通过使用以 https:// 开头的网址访问服务器。 建议您配置承载基于 LightSwitch 的应用程序访问的任何站点的 SSL。 有关更多信息,请参见 Configuring Secure Sockets Layer in IIS 7(配置 IIS 7 中的安全套接字层)。

若要启用 SSL

  1. 在菜单栏上,依次选择**“生成”“发布”**。

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

  3. 在**“需要安全连接 (HTTPS)”部分,选择“打开”**选项按钮。

    备注

    当此设置开启时,必须正确配置网站才能使用 HTTPS。

对于使用 SQL Server 数据层的 3 层应用程序,IIS 和该数据库之间的通信也可能易受攻击。 建议您配置由基于 LightSwitch 的应用程序访问的任何数据库的 SSL。 有关更多信息,请参见 Encrypting Connections to SQL Server(为到 SQL Server 的连接加密)。

Gg481776.collapse_all(zh-cn,VS.110).gif安全和版本控制

当使用在版本控制下的 LightSwitch 项目时,在 web.config 文件中的连接字符串可能包含用户名和该项目的最新开发人员的密码。 此信息可用于下一个检查项目输出的开发人员。

此问题不应用于发布应用程序;连接字符串信息从发布向导中不保存在版本控件中。 通过在设计时使用测试数据库而不是生产数据库,可以防止未经授权的用户访问生产数据。

Gg481776.collapse_all(zh-cn,VS.110).gif其他安全注意事项

除了身份验证,您还应该考虑其他方面的安全。 即使您的应用程序不处理敏感的商业数据,其他信息如密码也可能会面临风险。

在您编写访问服务器的代码时,还要考虑安全性。 例如,您可能编写代码来筛选员工数据,以便雇员只能看到他们自己的数据:

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.");
}

若要了解更多有关安全编码一般做法,请参见 Creating Secure Applications(创建安全应用程序)。

请参见

任务

LightSwitch 身份验证和授权

其他资源

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

调试:查找和修复错误