LightSwitch 安全性

保護 LightSwitch 應用程式的存取安全

Valerie Andersen

Matt Evans
Sheel 國王
Michael Simons

面對現實吧: 實作應用程式的安全性可以可能令人。幸好,Visual Studio LightSwitch 方便管理的商務 (LOB) 應用程式中的權限為基礎的存取控制可讓您建置應用程式的存取控制邏輯以符合您企業的特定需求。

LightSwitch 應用程式邏輯上包含三層: 簡報、 邏輯和資料存放區,而且也需要考慮達成存取,以確保適當的存取層級的每一層的資產。與 LightSwitch,您可以到右邊的層級的應用程式建置的存取控制邏輯。此外,您會發現 LightSwitch 會使用存取控制基礎的基礎技術中,並可透過 IIS 和 ASP 常見的存取控制設定。NET。

本文將探討存取控制 LightSwitch 應用程式中的運作方式。首先,我們將說明 LightSwitch 三層式架構中的存取控制所提供的功能。接下來,我們會簡短地檢視部署它屬於存取控制,並顯示進一步控制的一種方法可讓您存取使用支援 LightSwitch 的技術。最後,我們將討論存取控制,Windows Azure 環境中部署時。

存取控制項的基本概念

有兩個層面,存取 LightSwitch 應用程式中的控制項。第一種是驗證,或應用程式如何驗證使用者是誰屬實。第二個是授權,其中定義使用者允許執行或在應用程式。

驗證

驗證程序會決定使用者是否他所宣稱是誰。存取控制,在 LightSwitch 中的第一個圖層會要求使用者確認其身分識別應用程式。支援的驗證模式是 Windows 驗證表單驗證。這些選項可以設定應用程式的應用程式屬性存取控制索引標籤中,如下所示,在圖 1


圖 1] 在 [應用程式設計工具] 中定義的權限

當所有使用者都是在 Windows 網域,而您信任的登入電腦的人會使用應用程式的相同使用者,建議使用 Windows 驗證。Windows 驗證並不需要額外的登入提示和應用程式不需要儲存或管理外部的 Windows 密碼。「 Windows 驗證 」 更安全的選項,但是通常只有實際如果應用程式在網域的企業內部網路環境中執行。

第二個選項時,表單驗證,使用者會提示輸入使用者名稱和密碼,應用程式開啟時。在 LightSwitch,這些值依預設,會檢查對資料庫]。表單驗證的運作得很好在網際網路上執行的用戶端,或對於那些不在 Windows 網域。

表單驗證會要求任何使用者需要存取應用程式第一次新增到系統。Windows 驗證可以運作,這種方式,但是可以讓所有的 Windows 使用者可以登入到網域能夠存取應用程式在設計階段設定,預設情況下的選項。應用程式需要特定權限的任何部分無法存取尚未明確加入的 Windows 使用者。

驗證可讓您識別誰可以或無法使用應用程式,而且可能只需要符合某些種類的應用程式的存取控制需求。一旦使用者驗證,您可以選擇完全信任這些存取資料。在這種情況下,您的存取控制的實作已完成,而且沒有其他的權限或程式碼所需。您只需要考慮的部署考量事項為保護您的應用程式在裝載伺服器上的 [存取控制] 區段中所討論的 IIS 選項。

不過,許多應用程式需要更精細地控制使用者的行為之後已經過驗證。這些案例中,您將需要授權。

授權

LightSwitch 會提供開發商務規則的權限為基礎的授權的系統中所示圖 2


圖 2 在 LightSwitch 中實作授權

您在 [應用程式設計工具] 中定義的權限 (請參閱圖 1)。然後,您可以撰寫程式碼來檢查目前使用者是否具有必要的權限。可以在 [實體]、 [查詢] 和 [畫面中,實作存取控制方法,讓您很容易撰寫邏輯,以判斷目前使用者是否可以檢視或處理特定資料或者開啟特定的畫面。

LightSwitch 呼叫安全性系統管理的內建使用權限,任何接收此權限的使用者就會變成安全性系統管理員。安全性系統管理使用權限允許登入的使用者存取安全性系統管理] 畫面中執行的 LightSwitch 用戶端應用,經授與此權限的使用者會自動顯示。安全性系統管理員建立的應用程式所需的角色,並將所需的權限指派給每一個角色,如所示圖 3。然後,建立並指派給適當的角色,如所示使用者圖 4


圖 3 在執行階段建立角色


圖 4 使用者指派至角色,在執行階段

第一次部署應用程式時,安全性系統管理員必須新增 「 安全性系統管理角色,以初始應用程式存取。在部署程序將協助適當地設定這個預設的使用者。當部署應用程式執行時,系統將不允許移除最後的使用者帳戶的安全性系統管理員權限,以確保安全性系統管理員存在於所有的時間。

不過,您不需要部署您的應用程式,來確認適當的權限問題。當您執行 LightSwitch 應用程式在偵錯模式、 驗證和角色系統的開發環境會自動嘗試驗證特殊測試使用者在其中以特殊模式執行。您可以授與或拒絕從 LightSwitch 設計工具使用 「 授與偵錯 」 的資料行的測試使用者擁有的權限。然後應用程式會在偵錯模式中執行與選取供您進行測試的書面的許可邏輯的權限。這表示您可以快速地驗證而不必設定多個測試使用者和角色的使用權限檢查正確。

您的應用程式資產的控制存取重要的位置

現在我們來看安全以及如何保障其安全。許多應用程式已從檢視加以防範管理,只需要其他資料,可能是某些根本不需要存取受保護的資料必須保護某些機密資料。第一個要考慮保護資料的地方應該是邏輯層。當開發人員可控制資料適當地在邏輯層時,展示層通常會回應自動且正確地。例如,如果使用者沒有刪除 」 的 [刪除] 權限授與員工資料,顯示員工資料框格必須停用的按鈕。這正是電源及輕鬆建置應用程式與 LightSwitch。

實作資料層級的存取控制時,可讓應用程式更安全,並可讓開發人員利用內建的智慧。只能在展示層的資料保留在邏輯層公開資料。惡意的、 已驗證的使用者,可以略過展示層,存取服務直接讀取或處理資料。這與 LightSwitch 應用程式的三層式架構,事實上,三層式應用程式。展示層會負責的資料顯示在適當 不過,它不是已驗證的使用者存取資料,如果適當的存取控制項不實作邏輯層上的唯一方法。

邏輯層上的資料

邏輯層包含的元件,您可以套用權限檢查兩個主要群組: 實體和查詢。

實體實體是存取和使用應用程式資料的一般機制。有四個主要的動作,您可以執行的實體: 讀取、 插入、 更新和刪除。LightSwitch 可讓開發人員以驗證使用者的權限,每個執行,而且它也會檢查目前使用者具有特定使用權限定義在應用程式提供一個簡單的 API 攔截點。下列程式碼顯示範例的權限] 核取,以及各種門方法 API 提供可讓開發人員檢查權限:

partial void Employee_CanUpdate(ref bool result)
{
  result = Application.Current.User.HasPermission(Permissions.EmployeeUpdate);
}
 
partial void Employee_CanInsert...
partial void Employee_CanRead...
partial void Employee_CanDelete...
partial void SaveChanges_CanExecute...

請注意幾點。 首先,這些方法,是 SaveChanges_CanExecute,例外被實作設定整體的實體上並不是在特定實體執行個體上。 因此,執行任何檢查無法建立關聯至特定的實體執行個體上的資料值。 SaveChanges_CanExecute 方法可控制存取整個資料來源中的變更,因此不能包含實體或實體集的特定邏輯。 第二個,就是隱含為,則為 false 也 Employee_CanRead 方法會傳回 false,將不會呼叫的 Employee_CanUpdate 和 Employee_CanDelete 方法,如果。 使用者不允許更新或刪除實體,如果她不允許讀取它。

「 可以 」 方法是最粗略的安全性的基本方法。 它們支援基本資料的存取控制原則。 不過,它們會有一些限制。 需要更精細的控制,來讀取資料時,您可以在查詢上實作的存取控制邏輯。 若要控制寫入更細微層級的資料,您必須儲存管線中如此做。

查詢查詢也會受到保護邏輯層上。 每個查詢會有一個可讓您控制存取的方法。 LightSwitch 會自動產生三個查詢的每個實體: 所有的查詢,以傳回所有實體執行個體,且單一和 SingleOrDefault 查詢,以傳回由索引鍵的一個實體執行個體。 這些內建的查詢的每一個都有一種 CanExecute 方法,可以用來實作存取控制:

partial void Employees_All_CanExecute(ref bool result)
{
  result = Application.Current.User.HasPermission(Permissions.QueryEmployees);
}
 
partial void Employees_Single_CanExecute...
partial void Employees_SingleOrDefault_CanExecute...

請務必注意 LightSwitch 查詢是可撰寫,表示新的查詢可以根據現有的查詢。當將存取控制邏輯套用至查詢中,初始的查詢上的權限需求當作撰寫該查詢的查詢的輸入。單一的 SingleOrDefault 查詢是由組成上所有的查詢,,所以如果沒有特定的權限指定給衍生的查詢也設定所有查詢的都安全性保護這些查詢。不過,需要的話,您可以指定權限會比撰寫的查詢上限制較少衍生查詢。[CanRead] 此外,實體集上的方法將 CanExecute 前套用,該型別的任何查詢。

[圖 5顯示查詢撰寫的範例,如果員工實體建立 NorthAmericaEmployees 查詢,此查詢由內建的 Employee_All 查詢所組成。因此,透過 Employee_All_CanExecute 套用任何存取控制邏輯也適用於 
the NorthAmericaEmployees 的查詢因為 NorthAmericaEmployees 查詢以 Employee_All 查詢,假設沒有特定的程式碼會寫入衍生的查詢為基礎。如果您想要允許只有特定使用者存取 NorthAmericanEmployees 實體中的資料,特別無法限制,或開啟 NorthAmericaEmployees_CanExecute 方法透過該查詢的權限。


[圖 5 查詢轉譯緩衝處理員工實體上的

在關聯性的控制存取

當查詢使用跨關聯性,務必了解檢查權限的實體會周遊在相關實體之間的關聯為。這是另一個原因為何一定要有適當的實體上定義的權限。如果您要保護資料免於透過關聯性的讀取權限,請在實體上的 CanRead 方法必須要求的正確使用權限。例如,我們來看一次我們員工資料表和相關的補償資料,在模型中所示圖 6


圖 6 小時的應用程式模型

周遊補償員工之間的關聯性,透過查詢,實體的讀取動作的權限會評估為關聯性,會在 Compensation_All_CanExecute 上周遊而不是權限。必須正確設定使用權限補償實體的 CanRead 方法,如實體會周遊達成的正確使用權限。您必須要注意查詢可以用來推斷資料時並不安全的實體。例如,如果您有一個查詢可以傳回最上層支付的員工,如所示圖 7,存取傳回員工資料必須是正確的補償實體保護因此只有使用者被授與存取能夠透過查詢這個資料。


圖 7 定義查詢傳回的最上層支付的員工

提供自訂的簡報體驗

一旦資料已經獲得保護邏輯層,是設計在展示層中的使用者經驗的時候了。如果您不想讓使用者都可以存取特定的螢幕,您可以關閉螢幕透過 <ScreenName> _CanRun 方法,應用程式。當使用者沒有存取指定的螢幕時,螢幕不會顯示在她的巡覽功能表。您也可以使用 
 <CommandName> _CanExecute 方法,以限制在螢幕上的命令。

有數種其他方法可以在螢幕和可以用來隱藏、 顯示及控制在畫面上,例如 <EntityProperty> _IsReadOnly,<ScreenControl> 的特定控制項的可編輯狀態的實體。IsEnabled,<ScreenControl>。IsReadOnly 和 <ScreenControl>。檢閱 IsVisible。雖然這些方法的主要目的不是存取控制,它們在傳遞所需的使用者經驗很有用。在某些情況下,可能是最好的選擇來隱藏的資料的使用者不能操作。有時候您可能想要顯示唯讀的控制項。然後,有時候您會想要引導使用者正確輸入資料,並提供有意義的錯誤,如果在進入遺失。LightSwitch 展示層可讓所有這種彈性。

它應該清楚地瞭解, 提供邏輯來隱藏、 顯示或控制資料的可編輯狀態畫面上不會保護使用者存取的資料。它只會控制資料顯示方式。惡意的、 已驗證的使用者可能無法叫用直接來檢視或處理資料,如果未適當地保護邏輯層服務。這就是為什麼務必適當地實作每個應用程式層上的存取控制。

在儲存層上的資料

在儲存層是您的資料儲存在資料庫中的位置。您可以控制存取儲存層中的資料提供最小必要的權限,在資料庫上的資料庫登入。應用程式會使用這個登入連接到資料庫,並執行必要作業。所有連線的資料都是透過中介層,和使用者永遠不會有資料] 或 [連線字串的直接存取在三層式部署。在您部署的 LightSwitch 應用程式時,您必須指定連接字串中所示的應用程式用來存取資料, 圖 8。如果應用程式沒有唯一的資料庫登入,LightSwitch 將引導應用程式系統管理員若要建立一個。強烈建議是應用程式特定資料庫使用者識別和存取提供給應用程式所使用的相關資料。


圖 8] 執行的應用程式在部署期間指定的資料庫連線認證

值得一提它可能會部署兩層式部署安全的 LightSwitch 應用程式。在兩層式部署、 展示層和使用者的桌面上執行的邏輯層。此設定可讓儲存資料庫的 web.config 檔連接字串,用戶端存取的使用者,因此它不提供展示和完成安全的應用程式組態所需要的邏輯層的分隔。連接字串,使用者可以直接存取資料庫,並略過任何在中介層的存取控制邏輯。您最好在此情況下使用中介層和資料庫之間的 Windows 驗證。否則,三層式部署,就必須適當地保護應用程式。

存取控制的部署考量

在部署第一次一個 LightSwitch 應用程式時,您必須建立 LightSwitch 的系統管理使用者。一開始,這是唯一的使用者將擁有系統管理員權限。這位使用者會再用來設定角色和先前所述,在用戶端應用程式中的使用者。請注意這位使用者會在應用程式 LightSwitch 後,系統管理員,但不是一定是 Windows 系統管理員。命令列公用程式也是可用來建立新的系統管理使用者的部署程序之外。您可以找到這個公用程式,Microsoft.LightSwitch.SecurityAdmin.exe,LightSwitch 的安裝目錄中。

運用 IIS 中的存取控制功能

既然我們所討論 LightSwitch 專屬的存取控制功能,讓我們先簡單介紹應用程式管理員以手動方式可以安全使用支援的技術的 LightSwitch 應用程式的一些其他方法。

LightSwitch 及 SSL 像 Web 瀏覽器和 Web 伺服器、 LightSwitch 用戶端和伺服器通訊透過 HTTP 通訊協定。HTTP 指定資料會以純文字傳送,這表示網路以防小人無法監視資料的用戶端與伺服器交換。若要保護對網路竊聽的通訊,您應該改用 HTTPS 通訊協定,會隱藏標準 HTTP 資料加密的通道中。

LightSwitch 的應用程式可以部署,使得用戶端與伺服器透過 HTTPS 通訊。這樣可保護不只使用表單驗證時,會將用戶端和伺服器,但也使用者名稱及密碼之間交換的機密的商務資料。您最好與 IIS 或 Windows Azure 搭配使用表單驗證時,部署到 HTTPS 站台。否則,它有可能讓攻擊者偷竊驗證權杖,並模擬登入的使用者。當您使用 Windows 驗證,攻擊者無法復原使用者的密碼,或模擬使用者,即使是使用 HTTP,而不 HTTPS。不過,不論驗證模式中,用戶端和伺服器之間傳輸的商業資料是還必須受制於竊聽,除非使用 HTTPS。

SSL 憑證和網頁伺服器的通訊透過 HTTPS 依賴所安裝的伺服器憑證。憑證有兩個目的。首先,憑證驗證用戶端連線到伺服器是實際上是正確的伺服器尚未被取代或遭他人修改。第二,伺服器憑證包含用來加密傳送到用戶端的任何資料的秘密金鑰資訊。

網頁瀏覽器能信任它先前尚未連線到伺服器的身分,伺服器的憑證必須有密碼編譯由簽署受信任的憑證授權單位 (CA)。您也可以購買憑證從幾個提供者,例如 verisign.comentrust.netinstantssl.comgeocerts.com。大多數的提供者會酌產生或簽章伺服器的憑證,因為它的一般在開發環境中使用自我產生的未簽章,並因此不受信任,憑證。

如果您連線到 LightSwitch 的 Web 應用程式透過 HTTPS 伺服器正在使用不受信任的憑證,行為取決於您的 Web 瀏覽器。最小,您的瀏覽器會通知您憑證發生問題,並要求是否您想要繼續進行。LightSwitch 的 Web 應用程式,這應該正常運作。

不過,如果您使用 LightSwitch 桌面應用程式由 IIS 裝載,並透過 HTTPS 存取它,則 IIS 伺服器必須使用受信任的憑證。Silverlight 將不會允許來自不受信任的伺服器憑證的桌面應用程式。受信任的憑證會導致應用程式就會出現安裝成功,但在啟動時將會立即失敗。若要解決這個問題,請強制網頁瀏覽器信任伺服器憑證,預先它安裝在用戶端的憑證存放區,或取代其中一個伺服器憑證信任的 CA 已簽署的。請注意您將要執行其中一個矯正步驟之前存取應用程式第一次從指定的用戶端。否則,它會看到該用戶端憑證已變更或已遭他人修改。

IIS 不 LightSwitch 特定需要設定 IIS 伺服器上,以裝載 LightSwitch 應用程式使用 SSL。伺服器管理員應該將 Web 伺服器設定為啟用 HTTPS,及在一般的方式來選取憑證。

實際上可以裝載使用 HTTP 和 HTTPS,相同的 LightSwitch 應用程式,有些情況下,您可能要執行這項操作。但是請注意,如先前所述,任何透過 HTTP 連線的用戶端不會保護使用者密碼資訊或機密的商務資料。

根據預設,新版本的 IIS,在預設的網站會接聽 HTTP 和 HTTPS 連線。伺服器系統管理員可以強制 LightSwitch 應用程式部署到這類伺服器需要 HTTPS,並重新導向至 HTTPS 端點的任何 HTTP 的連入連線。這個設定是在 LightSwitch 應用程式的 web.config 中。

應用程式集區設定時發佈到 IIS,請考慮在它自己的應用程式集區中執行應用程式。應用程式集區提供隔離背景工作處理序 (所以如果一個 Web 應用程式當機,它並不會影響其他應用程式伺服器上的),但它們也允許應用程式在不同的識別下執行。因此您可以建立裝載 Web 應用程式的應用程式集區,或一組服務在特定的 Windows 識別下執行,且只允許存取資源的識別必須執行應用程式。LightSwitch 應用程式的情況下,其他的資源會是資料庫。預設情況下,部署精靈 」 會發佈在 asp 應用程式。在 [電腦帳戶識別下執行 NET 4 應用程式集區。但是,這個識別不能存取應用程式資料庫,因此如執行應用程式產生錯誤訊息 」 使用者登入失敗 ' IIS APPPOOL\ASP。NET v4.0。""

有幾個選項。如果您正在使用 SQL Server 的使用者名稱/密碼連接字串中,應用程式是最有可能隨時可以開始執行 (前提是該使用者擁有適當存取資料庫)。不過,當 Windows 驗證慣用連接至資料庫中,不同的應用程式集區有必要時,它可以設定為最低權限的 Windows 使用者帳戶下執行。這個帳戶必須也被授與適當的存取應用程式資料庫。

如果您使用 Windows 驗證,IIS 7] 中,則其中您應該注意的一個額外的組態設定。當您使用自訂的使用者識別為應用程式集區身分識別時,您需要使用 Windows NT LAN 管理員 」 (NTLM) 提供者 (不是 Kerberos)] 或 [啟用 Kerberos 驗證的支援。另一個選擇是使用網路服務識別為應用程式集區的身分識別,並將該帳戶的存取加入至資料庫。

保護向 LightSwitch Azure

在 Windows Azure 中裝載的所有 LightSwitch 應用程式都可以公開存取。因此,這些應用程式擁有一組唯一的存取控制需求。

SSL 加密 LightSwitch 會預設為發佈 Windows Azure 應用程式時,使用 HTTPS 端點。如此可確保任何機密商業資訊已加密,因為它在網際網路上通訊。LightSwitch 提供一個選項來建立自我簽署的 SSL 憑證發送期間應用程式。雖然這是很好的方法,在 Windows Azure 測試應用程式時,強烈建議讓外部廠商的授權的憑證使用,如先前所述。因為桌面應用程式將不會透過 SSL 使用受信任的憑證,您可以關閉 SSL 加密進行偵錯,藉由更新 Microsoft.LightSwitch.RequireEncryption 的部署設定值為,則為 false 時,若要這樣做後已成功部署應用程式,使用 Windows Azure 入口網站。

一旦已經過使用自我簽署的 SSL 憑證來測試應用程式,您可以更新的 SSL 憑證,而不重新發佈透過 Windows Azure 入口網站應用程式。新的 SSL 憑證可以裝載的應用程式上傳變更至較新的憑證指模的 SSLCertificate 值及開啟加密。

應用程式驗證建議使用表單驗證,可防止未經授權的存取 Windows Azure 裝載 LightSwitch 應用程式。發佈應用程式後,這會需要任何 
additional 伺服器組態。如果應用程式需要 Windows 驗證,不過,發行的 LightSwitch 應用程式必須是網域。這需要使用 Windows Azure 連線。您會發現指導,讓 Windows 在連線的 Azure bit.ly/qx0Z6n

SQL Azure 資料庫安全性 LightSwitch 
applications 通常會依賴 SQL Azure 資料庫的內建的資料庫。如果您在 LightSwitch 中建立的任何資料表,或使用驗證,此資料庫是必要的。SQL Azure 使用防火牆及使用者的認證的組合,以防止未經授權的存取。

若要讓 Windows Azure 裝載 LightSwitch 應用程式連接至資料庫,必須設定的 [允許其他 Windows Azure 服務來存取這個伺服器 」 的防火牆規則設為 true。LightSwitch 也需要發佈應用程式的電腦的 IP 位址新增防火牆規則。建議您在已發行的應用程式之後,會移除此防火牆規則。這會防止任何外部電腦存取資料庫。

完成

LightSwitch 可以幫助開發人員建置企業應用程式以簡單而有效率的方式,這適用於實作存取控制功能。開發人員可以快速且輕鬆地限制存取他們的應用程式,透過驗證的使用。需要更細微的控制時,授權功能,可提供了強大的方法,來定義權限] 和 [安全的資產,在要有效地控制使用者存取的應用程式邏輯和資料層。在 IIS 和 Windows Azure 的常用的功能可以利用完整的存取控制解決方案。創新,其實您!尋找更多 LightSwitch 小組在 blogs.msdn.com/b/lightswitch

 

Valerie Andersen 是 Microsoft 程式管理員處理 Visual Studio 的 LightSwitch。其目的是要磁碟機功能可讓真實世界的開發人員可以快速地建置安全的 LightSwitch 到全世界的客戶需求的品質應用程式。

Matt Evans 是軟體測試人員使用 LightSwitch。他想要確定您的 LightSwitch 應用程式是安不安全,您可以在需要。

Sheel 國王 是 Microsoft 程式管理員處理 LightSwitch。他對小組的重點包括設計 Windows Azure 支援、 部署和 LightSwitch 用戶端功能。

Michael Simons 是資深 Microsoft 開發人員使用 LightSwitch。他對小組的重點開發資料和安全性功能。

感謝到下列的技術專家來檢閱這份文件:陳志祥 LeeaphonJohn Rivard陳志祥 SeefeldtMatt Thalman