共用方式為


LightSwitch 的安全性考量

大多數商務應用程式都有安全性需求。 例如,可能要限制哪些員工可存取應用程式、可存取應用程式中的畫面,以及哪些使用者可以檢視或更新某些資料。 LightSwitch 提供了內建的驗證和授權模型,有助於應用程式實作安全性。

驗證和授權

驗證是確認使用者是誰的機制。 例如,當您登入 Windows 時,您的使用者名稱和密碼會驗證您真的是您本人。 授權是定義您可以或不可以執行之動作的機制。 例如,員工或許能夠可以檢視自己的薪資資訊,但他們很可能不會被授權給自己加薪。

在 LightSwitch 中,驗證是由用於識別使用者的登入畫面處理。 在驗證使用者之後,角色和使用權限會決定該使用者已獲授權在應用程式中執行的動作。

Gg481776.collapse_all(zh-tw,VS.110).gif啟用驗證

LightSwitch 中的驗證預設會停用;您可以在應用程式設計工具的 [存取控制] 索引標籤上啟用它。 支援 Windows 驗證和表單驗證。 Windows 驗證使用使用者的 Windows 登入資訊來識別使用者。 使用表單驗證時,應用程式系統管理員會建立使用者識別和密碼。

在選擇 Windows 驗證時,您還可以選擇只有特定使用者還是所有 Windows 使用者可以存取應用程式。 如果您選擇所有使用者,任何有有效 Windows 登入識別碼的使用者都能夠存取應用程式,但他們只會獲得最小使用權限。 您仍可以視需要將角色和權限指派給個別使用者。

Gg481776.collapse_all(zh-tw,VS.110).gif使用權限、使用者和角色

LightSwitch 授權可透過定義權限、使用者和角色來完成。 使用權限是由開發人員在應用程式設計工具的 [存取控制] 索引標籤上建立的,並透過撰寫程式碼來指定這些使用權限的效果。 例如,您可以建立 ViewSales 使用權限,以授權使用者檢視銷售畫面。 在畫面的 CanView 方法,您會撰寫只在目前使用者已被授與檢視畫面的使用權限時才允許畫面顯示的程式碼。 除了設定可檢視畫面的使用權限之外,您也可以建立使用權限以限制對畫面上個別控制項、資料實體或實體欄位、查詢等的存取。

已部署應用程式後,將由應用程式系統管理員建立角色。 角色包含一個或多個使用權限。 例如,系統管理員可以定義業務角色,並將 ViewSales 使用權限指派給該角色。 應用程式系統管理員還會加入使用者,並將角色指派給使用者。 例如,如果 Bob 是在銷售部門中,系統管理員可能加入他的驗證資訊,將 Bob 加入做為使用者,然後將他指派至業務角色。 當應用程式執行時,程式碼將評估 Bob 的使用者資訊、確定他是業務角色的成員,以及顯示功能表項目以顯示銷售畫面。

每個應用程式都有預設使用權限 SecurityAdministration 使用權限。 這個使用權限授與對 [使用者] 和 [角色] 管理畫面的存取,以供應用程式系統管理員使用。 第一次發行應用程式時,您可以針對將成為預設應用程式系統管理員的人員提供驗證資訊。 當該使用者第一次執行應用程式時,他們就會看到 [使用者] 和 [角色] 畫面,也可以定義使用者和角色。

Gg481776.collapse_all(zh-tw,VS.110).gif測試授權

測試應用程式時,您會想要確定任何定義的使用權限如預期運作。 您透過在應用程式設計工具的 [存取控制] 索引標籤上啟用偵錯使用權限,來執行此操作。 例如,如果您定義了 ViewSales 使用權限,可以對該使用權限勾選 [允許用於偵錯] 核取方塊。 在偵錯應用程式時,您可以確認是否可以檢視銷售畫面 – 您的執行身分是具有 ViewSales 使用權限的使用者。 您可以設定使用權限的任何組合,以模擬可能指派給指定角色的使用權限。

注意事項注意事項

如果您啟用偵錯的 SecurityAdministration 使用權限,就可以在偵錯期間檢視管理的 [使用者] 和 [角色] 畫面。雖然您可以在這些畫面中輸入使用者和角色,但是使用者和角色不會與應用程式一起部署,也不能用於偵錯使用權限。

Gg481776.collapse_all(zh-tw,VS.110).gif安全連接。

對於以 LightSwitch 在伺服器控制項和裝載執行 Internet Information Services (IIS),應用程式和伺服器會使用 HTTP 通訊協定之間的通訊 (而不是使用 HTTPS 通訊協定,更安全的三層的用戶端應用程式。 這個需求可能會讓應用程式更容易受到攻擊者。 Secure Sockets Layer (SSL) 加密來保護傳送至用戶端應用程式和伺服器之間的機密或個人資訊。 在 SSL 啟用時,遠端用戶端應用程式存取伺服器使用開始 https://的 URL。 我們建議您針對裝載應用程式根據 LightSwitch的所有網站 SSL。 如需詳細資訊,請參閱在 IIS 7 中設定安全通訊端層

若要啟用

  1. 在功能表列上,選擇 [ 建置], [發行]。

  2. 發行應用程式精靈,選擇 安全性設定 索引標籤。

  3. 需要安全連線 (HTTPS) 區段中,選擇 [ 選項按鈕。

    注意事項注意事項

    請注意開啟此設定時,必須將網站適當設定為使用 HTTPS。

對於使用 SQL Server 資料層的 3 層應用程式,IIS 和資料庫之間的通訊也可能有弱點。 我們建議您針對由應用程式存取根據 LightSwitch之資料庫的 SSL。 如需詳細資訊,請參閱加密 SQL Server 的連接

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

當您在版本控制下的 LightSwitch 專案時,在 web.config 檔中的連接字串可能包含使用者名稱和密碼專案的新開發人員使用。 這項資訊就其他簽出專案的開發人員。

這個問題不適用於發行的應用程式,將發行精靈的應用程式版本控制不會儲存。 使用而非實際執行資料庫的測試資料庫在設計階段,您可以防止未經授權的使用者存取實際執行資料。

Gg481776.collapse_all(zh-tw,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;
}

雖然這會顯示資料,但是如果使用者嘗試更新或刪除資料,而且發生並行存取例外狀況時,其他員工的資料就會在伺服器傳回的錯誤資訊中公開。 為避免出現這種情況,您會希望要在 Updating 和 Deleting 方法中撰寫額外的程式碼,以確保員工只能看到他們自己的資料:

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

若要進一步了解一般的安全編碼做法,請參閱建立安全應用程式 (英文)。

請參閱

工作

LightSwitch 驗證和授權

其他資源

部署:散發與維護應用程式

偵錯:尋找和修正錯誤