国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

設計由應用程序管理的授權

2024-07-21 02:24:31
字體:
來源:轉載
供稿:網友
設計由應用程序管理的授權
2002年12月

chris schoon、doug rees、edward jezierski
microsoft corporation

摘要


本指南介紹為基于 microsoft® .net 的單層或多層應用程序設計和編寫由應用程序管理的授權的指導原則,主要討論常見的授權任務和方案,并提供相應的信息幫助您選擇最佳方法和技術。本指南適用于體系結構設計人員和開發人員。
本指南假定讀者已經了解 windows 身份驗證和授權、xml web service 以及 .net remoting 等主題的基本知識。有關設計分布式 .net 應用程序的詳細信息,請參閱 msdn® library 中的“designing applications and services”。有關分布式應用程序安全設計的詳細信息,請參閱 msdn library 中的 building secure asp.net applications(英文)。有關其他的常規設計準則,請參閱 microsoft technet 中的 .net architecture center(英文)。

下載


單擊此處下載本指南(pdf 格式)。

目錄


本指南包括以下各節:
  • 簡介
  • 了解授權
  • 設計用于授權的身份驗證
  • 設計用于授權的標識流
  • 在企業應用程序中執行授權
  • 使用基于角色的 .net 安全設置創建授權代碼
  • 重復使用授權實現
  • 附錄

簡介


本指南介紹如何在基于 .net 的應用程序中實現授權,解釋術語“授權”并討論幾種執行授權的機制。本指南還包括以下內容:
  • 標識和主體等重要概念。
  • 如何使用基于角色的安全設置來授權具有相同安全特權的一類用戶。
  • 基于角色的 .net 和 com+ 安全設置之間的主要區別。

采用何種授權機制通常取決于驗證用戶身份(標識)的方法。本指南將探討以下內容:
  • windows 身份驗證和非 windows 身份驗證之間的區別。
  • 這些身份驗證機制如何影響授權。
  • 如何向遠程應用程序層傳遞用于授權的標識信息。

在典型的企業應用程序中,需要在應用程序的不同層次執行不同類型的授權。為了幫助您識別各層的授權需要以及在不同的方案中選擇合適的授權策略,本指南介紹在用戶界面層、業務層和數據層中通常使用的典型授權任務。圖 1 顯示了企業應用程序的各個層上出現的一些重要授權問題。

圖 1:在企業應用程序的各層中執行授權
.net framework 類庫提供了多種接口和類,幫助您使用基于角色的 .net 安全設置來執行授權。本指南介紹:
  • 幾種檢查用戶是否屬于某個特定角色的技術。
  • 如何處理授權錯誤。
  • 在多線程的 .net 應用程序中出現的特殊授權問題。

定義授權框架時所做的大部分工作,都可以在多個應用程序中重復使用。本指南將對以下內容進行總結:
  • 如何定義可重復使用的授權框架。
  • 使框架的安全性和性能達到最佳的原則。
注意:本指南適用于使用 .net framework 功能進行由應用程序管理的授權。microsoft windows® server 2003 系列操作系統中的授權管理器 api 和 microsoft management console (mmc) 管理單元,為應用程序提供了具有完整的基于角色的訪問控制框架。授權管理器 api 也稱為 azman,它提供了一種簡化的開發模型,用于管理靈活的分組和業務規則,并可用于存儲授權策略。有關詳細信息,請參閱 msdn library 中的 authorization interfaces(英文)和 authorization objects(英文)。

了解授權


“授權”是對通過驗證的主體(用戶、計算機、網絡設備或程序集)是否具有執行某項操作的權限的確認。授權提供的保護只允許指定用戶執行特定操作,并防止惡意行為。
本節的內容如下:
  • 授權提供的保護。
  • 基本授權。
  • .net framework 的授權功能。

降低安全威脅


僅有授權還不足以保證應用程序的安全,因此,本指南將簡要介紹應用程序面臨的幾種威脅。以下是一些常見的安全威脅,這些威脅通常縮寫為“stride”,包括:
  • 標識欺騙 - 未授權的用戶冒充應用程序的合法用戶
  • 篡改數據 - 攻擊者非法更改或毀壞數據
  • 可否認性 - 用戶否認執行了操作的能力
  • 信息泄露 - 敏感數據被泄露給本應無權訪問的人或位置
  • 拒絕服務 - 導致用戶無法使用應用程序的破壞行為
  • 特權升級 - 用戶非法獲得過高的應用程序訪問特權

您可以使用以下技術來解決 stride 威脅:
  • 身份驗證 - 嚴格的身份驗證有助于減少標識欺騙。當用戶登錄到 windows 或啟動應用程序時,他(她)會輸入“憑據”信息,如用戶名和密碼。windows 使用 ntlm 或 kerberos 等協議驗證用戶的憑據,并讓用戶登錄到系統。應用程序則通常使用系統登錄產品,或者以實現自定義身份驗證作為授權的基礎。有關身份驗證的詳細信息,請參閱 msdn library 中的 building secure asp.net applications(英文)。
  • 授權 - 使用本指南介紹的授權技術來應對數據篡改和信息泄露的威脅。
  • 標識流 - 跨多臺計算機部署的應用程序,有時需要在系統中的計算機之間傳遞代表通過驗證的用戶標識的信息。如果在第一臺計算機中進行身份驗證,而其他應用程序邏輯駐留在單獨的計算機上,通常會用到標識流。有關標識流的詳細信息,請參閱本指南后面的設計用于授權的標識流。
  • 審核 - 記錄已授權的和未授權的操作,減少可否認性帶來的威脅。本指南不對審核進行詳細介紹。有關審核的詳細信息,請參閱 msdn library 中的 building secure asp.net applications(英文)。

有關 stride 的詳細信息,請參閱 msdn library 中的 designing for securability(英文)。
圖 2 顯示的模型說明了如何降低多層應用程序中的 stride 安全威脅。

圖 2:多層應用程序的安全模型
圖 2 描述的是一種具有多個物理層的部署,但是,許多較小的應用程序是在一個物理層上完成的,這就簡化了身份驗證、授權和標識流。圖 2 包含了以下降低安全威脅的措施:
  1. 通過帶寬限制來降低拒絕服務 (dos) 的攻擊。這可以防止惡意的應用程序和用戶對應用程序連續進行不受歡迎的干擾,從而避免應用程序出現問題。
  2. 使用加密來保證通信安全。
  3. 身份驗證可以防止標識欺騙。
  4. 身份驗證根據數據存儲庫來驗證憑證。
  5. 應用程序層之間使用標識流(可選)。
  6. 通過審核來保證可否認性。
  7. 通過授權來應對篡改和泄露數據的威脅。

選擇授權機制


您可以使用多種授權機制來控制應用程序的功能,使其按預期方式運行,不被意外或蓄意誤用。這些授權機制包括以下幾種:
  • 系統授權 - windows 使用訪問控制列表 (acl) 保護資源,如文件和存儲過程。acl 指定哪些用戶可以訪問安全資源。
  • .net 代碼訪問安全性授權 - 代碼訪問安全性根據代碼的來源授權代碼以執行操作。例如,代碼訪問安全性根據證據標準,確定 .net 應用程序中可以訪問其他程序集的程序集。
  • 應用程序授權 - 應用程序代碼自身授權用戶操作。

可以綜合使用這些方法創建安全的應用程序,如圖 3 所示。

圖 3:選擇授權機制

系統授權


“系統授權”是為操作系統控制的對象(例如打印機、文件)設置資源權限或 acl 的過程。系統管理員負責維護這些設置。系統授權是一種非“是”即“否”的決策模式:用戶要么被授權訪問資源,要么不被授權訪問資源。
系統授權的示例包括:
  • 基于 microsoft asp.net 的應用程序授權設置,用于限制對 web.config 文件中指定的 url 文件或路徑的訪問。
  • active directory® 目錄服務中的權限設置。
  • ntfs 文件系統訪問控制項。
  • 消息排隊權限。
  • 服務器產品(如 microsoft sql server™)中授予的權限。這種權限可能涉及各種對象,如表或視圖。

有關系統級安全和授權的詳細信息,請參閱 msdn library 中的 building secure asp.net applications(英文)。
系統授權可以對各種對象施加約束,而限制代碼則需要采用 .net 代碼訪問安全性授權。

.net 代碼訪問安全性授權


.net 公共語言運庫使用代碼訪問安全性來限制可執行的代碼。代碼訪問安全性根據證據向應用程序代碼授予權限(稱為“權限設置”)。這些證據可以包括代碼的來源、發布者或其他證據,如程序集的嚴格名稱。
權限設置使您能夠控制應用程序可以執行的操作,如刪除文件或訪問 internet。例如,您可以限制應用程序只使用隔離的存儲單元或控制打印訪問。
不管用戶的身份如何,代碼訪問安全性只考慮證據,即使具有管理特權的用戶使用應用程序,代碼訪問安全性權限仍舊保持不變。例如,如果代碼來自 internet,不管用戶是誰,對其應用的限制(如刪除文件的能力)保持不變。
代碼訪問安全性的應用示例包括:
  • 限制下載組件的操作權利并將其放置到隔離環境中,防止下載組件執行危險操作。隔離有助于防止欺詐代碼損壞系統。
  • 為在 web 服務器或應用程序服務器上運行的宿主代碼創建隔離環境。
  • 限制組件的操作權利,防止被惡意代碼誤用。
注意:請使用 caspol.exe 或 microsoft .net framework 配置管理控制臺配置代碼訪問安全性。

有關代碼訪問安全性的詳細信息,請參閱 msdn library 中《.net framework developer's guide》中的 code access security(英文)一文。
代碼訪問安全性通過檢查代碼權限來保證系統的安全性,但可能還需要使用應用程序授權來檢查用戶的權限,這取決于應用程序。

應用程序授權


大多數應用程序會根據用戶與系統的交互活動實現不同的功能或安全權限。設計“應用程序授權”指根據程序中的用戶角色,實施業務規則或限制用戶對應用程序資源的訪問。
應用程序授權的主要目的是保護功能和其他無形內容,如業務邏輯。因此,很難使用當前的系統級技術實現應用程序授權,因為這些技術需要使用有關物理資源的設置,如 acl。例如,您想確保對員工費用申請的批準操作的安全,卻沒有要保護的物理資源,因此,當您設計應用程序授權時,應該著眼于高級別的操作,而不是各種資源。
當系統授權機制分類過細或不考慮應用程序的數據與狀態時,應用程序授權提供了另一種系統授權方法。例如,如果 xml web service 的系統級安全標準仍處于開發階段,還在不斷地發展豐富,那么您可以不必等到標準形成之后再向 xml web service 添加安全設置或創建安全的 xml web service。對于目前已創建的 xml web service,您可以實現應用程序授權,使用安全套接字層 (ssl) 或其他組合來保護對服務的調用。
應用程序授權的示例包括:
  • 檢查用戶是否具有執行應用程序中特定操作(如批準費用申請)的權限。
  • 檢查用戶是否具有訪問應用程序資源(如從數據庫中檢索敏感數據列)的權限。

在本指南的后面部分中,您將學習如何設計這些應用程序授權以及如何編寫相關代碼。

入口檢查


為了防止操作被連續不斷地錯誤執行而導致最終失敗,您應該始終做到盡快地對用戶的每個請求進行授權。每個授權點稱為“看門人”。這種看門機制的示例包括 asp.net 入口中的文件和 url 授權。在標識流向各個層次傳遞的過程中,可能會有若干個“看門人”。在門口進行檢查可以減少在系統深層(通過入口點或門以后)必需的授權檢查次數。
在系統深層執行授權檢查的對象需要較少的授權失敗補償邏輯。單個組件不負責處理授權失敗,不會拋出異常來通知失敗的調用者。

使用角色執行授權


.net framework 提供了基于角色的應用程序授權能力。“角色”指共享同一安全特權的一類或一組用戶。
使用角色代替特定的用戶標識具有以下優勢:
  • 發生變化(如添加用戶、提升用戶或用戶調離工作)時,不需要改變應用程序。
  • 維護角色的權限比維護各個用戶的權限容易。例如,處理 10 個角色比處理 120 個用戶容易,而且還節省時間。
  • 一個用戶可以具備多個角色,這增強了分配和測試權限的靈活性。

根據業務組織定義角色


角色可以代表用戶在組織中的地位,例如:
  • manager
  • employee
  • claimapprovaldepartment

使用這種方法的一個好處是信息通常可以從存儲庫(例如 active directory)中檢索出來。通常情況下,這些角色在對實際業務需求進行建模時十分有用。

與組織的變化無關


您還可以使用角色來指出用戶執行的工作屬于哪種操作類型。這樣的角色可以將應用程序的功能鏈接到各個用戶,例如:
  • canapproveclaim
  • canaccesslab
  • canviewbenefits

第二種方法更靈活一些,因為您可以圍繞應用程序的功能來設計角色,而不用過多考慮組織的結構,但維護起來可能比較困難,因為缺乏保存角色的結構。大多數情況下,需要在應用程序中綜合使用這些方法。

不使用角色執行授權


有時您必須以用戶是誰作為授權的基礎,而不會過分關注用戶在應用程序中扮演的角色。例如,您可能要實現只允許部門經理批準員工的費用申請,而要達到這種授權級別,可以將當前用戶與提出申請的員工的經理進行比較。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 晋州市| 武鸣县| 阳新县| 枣强县| 海淀区| 霍林郭勒市| 温州市| 万宁市| 疏勒县| 靖边县| 汉阴县| 洛扎县| 泗阳县| 读书| 象山县| 澜沧| 射阳县| 融水| 三台县| 怀柔区| 曲靖市| 嘉定区| 韶山市| 伊通| 依安县| 监利县| 夏津县| 金阳县| 固原市| 周至县| 珲春市| 蓬莱市| 巢湖市| 通河县| 合水县| 克什克腾旗| 区。| 新疆| 淮滨县| 新绛县| 绥宁县|