1. Asp.net 是依存于 IIS 的一個(gè)服務(wù),說到 Asp.net 的安全相關(guān)的話題當(dāng)然要有一個(gè)整體上的思路: IIS 接收 — 》 IIS 驗(yàn)證 — 》 IIS 授權(quán) --- 》 ASP.net 驗(yàn)證 --- 》 Asp.net 授權(quán) --- 》資源返回給用戶
IIS 從網(wǎng)絡(luò)上接收到一個(gè) HTTP WEB 請(qǐng)求可以使用 SSL 技術(shù)來保證服務(wù)器的身份,此外 SSL 也可以提供一個(gè)安全通道來保護(hù)客戶端和服務(wù)器端的機(jī)密數(shù)據(jù)的傳送。 IIS 使用基本 摘要式 或者其它的方式驗(yàn)證用戶,如果網(wǎng)站中的大部分內(nèi)容不需要驗(yàn)證就可以設(shè)定為匿名驗(yàn)證。驗(yàn)證之后是授權(quán),通過授權(quán) IIS 來允許或者禁止用戶訪問某資源。 IIS 可以使用 ACL 定義的 NTFS 權(quán)限或者針對(duì) IP 地址的客戶端授權(quán)。
IIS 把 Windows 存取令牌傳送到 Asp.net ,如果 IIS 使用的是匿名驗(yàn)證則為匿名 Internet 使用者的存取令牌( IUSER_MYMACHINE )。 ASP.net 驗(yàn)證訪問者(有三種方式)。 Asp.net 授權(quán)所需要的資源或者操作(有兩種授權(quán)方法)。
Asp.net 中程序的代碼使用特別的身份來存取本機(jī)或者遠(yuǎn)程資源。
2. 身份驗(yàn)證 :身份驗(yàn)證就是一個(gè)解決誰有權(quán)力進(jìn)入系統(tǒng)的問題,通常的做法就是跟系統(tǒng)維護(hù)的用戶名單進(jìn)行核對(duì),這樣轉(zhuǎn)化為一個(gè)實(shí)際的技術(shù)問題:如果有效的判斷一個(gè)用戶是不是系統(tǒng)的有效用戶。這個(gè)過程就是 —Authentication( 身份驗(yàn)證 )
專業(yè)說法:接收用戶憑據(jù),并根據(jù)指定的頒發(fā)機(jī)構(gòu)來驗(yàn)證憑據(jù)的過程成為身份驗(yàn)證
3. Asp.net 提供三種身份驗(yàn)證方式: Windows 驗(yàn)證 、 Forms 驗(yàn)證 、 Passport 驗(yàn)證
身份驗(yàn)證的使用是通過配置 Web.config 文件的 < Authentication > 配置節(jié)來實(shí)現(xiàn)的。
4. 授權(quán) :授權(quán)就是確認(rèn)用戶擁有足夠的權(quán)限來訪問請(qǐng)求的資源
5. Asp.net 提供兩類授權(quán)服務(wù):文件授權(quán)服務(wù) 、 URL 授權(quán)服務(wù)
說點(diǎn)細(xì)節(jié)
1. < Authentication > 配置節(jié) mode 可用的參數(shù): None Windows Forms Passport
2. Windows:IIS 根據(jù)程序的設(shè)置執(zhí)行身份的驗(yàn)證 ( 基本 簡(jiǎn)要 或者集成 Windows)
注意使用這種驗(yàn)證方式 IIS 中必須要禁用匿名訪問。
3. Windows 驗(yàn)證適用于受控環(huán)境中,比如企業(yè)的 Intranet
4. Foms 這種驗(yàn)證使用 Cookie 保存用戶憑證,并將未將驗(yàn)證的用戶重定向到登錄頁。通常這是的 IIS 配置為匿名訪問
5. Forms 適合部署于互聯(lián)網(wǎng)的網(wǎng)站應(yīng)用
6. Passport 驗(yàn)證是通過微軟的集中身份驗(yàn)證服務(wù)執(zhí)行的,它為成員站點(diǎn)提供單點(diǎn)登錄和配置文件服務(wù)
7. Passport 適用于跨站點(diǎn)應(yīng)用,一旦用戶注銷所有的護(hù)照信息就會(huì)清除,可以在公共場(chǎng)所使用它。
8. ACL 面向的是文件, IIS 提供通過驗(yàn)證的用戶,通過比較 ACL 調(diào)用標(biāo)記完成授權(quán)
9. URL 授權(quán) 檢查的根據(jù)是 URL 本身而不是 URL 對(duì)應(yīng)的文件, URL 授權(quán)可以是應(yīng)用程序像基于窗體的身份驗(yàn)證或者 Passport 的身份集成驗(yàn)證,因?yàn)檫@些驗(yàn)證中的用戶和計(jì)算機(jī)或者域中的賬戶并不對(duì)應(yīng)。還控制對(duì)虛擬資源的訪問。
10. URL 授權(quán)的配置: 授權(quán)指令: allow deny 對(duì)應(yīng)操作對(duì)象是 roles users 還可以使用 Verb 屬性區(qū)別不同的 HTTP 行為( POST /GET )
11. 通常情況下用戶訪問一個(gè)網(wǎng)站都是使用匿名訪問,匿名訪問的用戶都會(huì)轉(zhuǎn)化為操作系統(tǒng)上的一個(gè)帳號(hào)來訪問服務(wù)器
<authentication mode=”windows”>
<identity impersonate=”true”>
12. Windows 驗(yàn)證用戶通過了驗(yàn)證之后, Asp.net 會(huì)觸發(fā) Global.asax 文件中的 WindowsAuthentication_OnAuthenticate 事件,可以在這里添加代碼把用戶信息附加到請(qǐng)求上。
13. Passport 驗(yàn)證的問題是有多少網(wǎng)站愿意把自己的用戶數(shù)據(jù)放在微軟的數(shù)據(jù)庫中?
14. Asp.net 使用基于角色的安全:把用戶映射到一個(gè)角色組里面,這個(gè)角色組對(duì)應(yīng)一定的權(quán)限,這樣就實(shí)現(xiàn)了對(duì)一個(gè)群體的權(quán)限管理。所以角色應(yīng)該是對(duì)一組具有相同權(quán)限用戶的抽象。