婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > asp.net身份驗證方式介紹

asp.net身份驗證方式介紹

熱門標簽:浙江外呼系統(tǒng)怎么安裝 上海楊浦怎么申請申請400電話 地圖標注多個行程 山西防封卡電銷卡套餐 廈門商鋪地圖標注 云南外呼電銷機器人系統(tǒng) 海外地圖標注門市標 陜西人工外呼系統(tǒng)哪家好 銅川小型外呼系統(tǒng)運營商
windows身份驗證: IIS根據(jù)應(yīng)用程序的設(shè)置執(zhí)行身份驗證.要使用這種驗證方式,在IIS中必須禁用匿名訪問.
Forms驗證:用Cookie來保存用戶憑證,并將 未經(jīng)身份驗證的用戶重定向到自定義的登錄頁.
Passport驗證:通過Microsoft的集中身份驗證服務(wù)執(zhí)行的,他為成員站點提供單獨登錄 和核心配置文件服務(wù).

一. 配置windows身份驗證
1)配置IIS設(shè)置
asp.net身份驗證方式(ref:DreamSpace <wbr>of <wbr>Dern)

2)設(shè)置Web.config
system.web>
authentication mode = "Windows">
!--通知操作系統(tǒng)將當前登錄的用戶的信任書傳遞給瀏覽器-->
authorization>
!--禁止匿名用戶訪問-->
deny users = "?"/>
/authorization>
/system.web>
二.配置Forms身份認證
1)配置web.config
復(fù)制代碼 代碼如下:

?xml version="1.0"?>
!--
Note: As an alternative to hand editing this file you can use the
web admin tool to configure settings for your application. Use
the Website->Asp.Net Configuration option in Visual Studio.
A full list of settings and comments can be found in
machine.config.comments usually located in
\Windows\Microsoft.Net\Framework\v2.x\Config
-->
configuration>
appSettings/>
connectionStrings/>
!--允許匿名用戶登錄register.aspx頁-->
location path="register.aspx">
system.web>
authorization>
allow users="?" />
/authorization>
/system.web>
/location>
system.web>
!--
Set compilation debug="true" to insert debugging
symbols into the compiled page. Because this
affects performance, set this value to true only
during development.
-->
compilation debug="true"/>
!--
The authentication> section enables configuration
of the security authentication mode used by
ASP.NET to identify an incoming user.
-->
authentication mode="Forms">
forms name="auth" loginUrl="login.aspx" timeout="30" protection="All" path="/">/forms>
/authentication>
!--禁止匿名用戶登錄-->
authorization>
deny users="?"/>
/authorization>
!--
The customErrors> section enables configuration
of what to do if/when an unhandled error occurs
during the execution of a request. Specifically,
it enables developers to configure html error pages
to be displayed in place of a error stack trace.

customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
error statusCode="403" redirect="NoAccess.htm" />
error statusCode="404" redirect="FileNotFound.htm" />
/customErrors>
-->
/system.web>
/configuration>

2)登錄頁面代碼
login.aspx
[/code]
%@ Page Language="C#" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="login" %>
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
html xmlns="http://www.w3.org/1999/xhtml" >
head runat="server">
title>Untitled Page/title>
/head>
body>
form id="form1" runat="server">
div>
asp:TextBox ID="TextBox1" runat="server">/asp:TextBox>
asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="登陸" />/div>
/form>
/body>
/html>
復(fù)制代碼 代碼如下:


[code]
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text, false);
}
}

三.配置Passport身份認證
需要安裝Passport Software Developer Kit.這種認證方式適合于跨站之間的應(yīng)用,用戶只有一個用戶名和密碼可以訪問任何成員站。

IIS 身份驗證

如果 ASP.NET 針對 Windows 身份驗證進行配置,則 ASP.NET 依靠 IIS,利用配置好的身份驗證模式對其客戶端進行身份驗證。IIS 通過檢查特定應(yīng)用程序的元數(shù)據(jù)庫設(shè)置來確定其身份驗證模式。成功驗證某個用戶的身份后,IIS 將代表經(jīng)過身份驗證的用戶的 Windows 令牌傳遞給宿主 ASP.NET 的 ASP.NET 輔助進程 (w3wp.exe)。如果應(yīng)用程序使用在 IIS 中配置的虛擬目錄來支持匿名訪問,該令牌代表匿名 Internet 用戶帳戶;否則,該令牌代表經(jīng)過身份驗證的用戶。

IIS 支持以下身份驗證模式:

匿名。如果不需要對客戶端進行身份驗證(或者使用自定義身份驗證機制,如窗體身份驗證),則可將 IIS 配置為允許匿名訪問。在該事件中,IIS 創(chuàng)建一個 Windows 令牌來表示具有相同匿名(或客人)帳戶的所有匿名用戶。默認的匿名帳戶是 IUSR_MACHINENAME,其中 MACHINENAME 是安裝期間指定的計算機的 NetBIOS 名稱。

基本。基本身份驗證要求用戶以用戶名和密碼的形式提供憑據(jù)來證明他們的身份。基本身份驗證基于 Internet 標準 RFC 2617,所有常用瀏覽器都支持它。用戶的憑據(jù)以未加密的 Base64 編碼格式從瀏覽器傳送到 Web 服務(wù)器。為了更好保護這些憑據(jù),只要在使用基本身份驗證同時再使用安全套接字層 (SSL) 即可。由于 Web 服務(wù)器包含未加密的用戶憑據(jù),因此 ASP.NET 應(yīng)用程序可以模擬調(diào)用方并使用他們的憑據(jù)來訪問網(wǎng)絡(luò)資源。

集成的 Windows。集成的 Windows 身份驗證(以前稱為 NTLM,也稱為 Windows NT 質(zhì)詢/應(yīng)答身份驗證,Windows NT Challenge/Response)是使用 Kerberos v5 身份驗證還是 NTLM 身份驗證,取決于客戶端和服務(wù)器的配置。服務(wù)器與客戶端協(xié)商確定要使用的協(xié)議。如果滿足以下條件,則使用 Kerberos 身份驗證:

ASP.NET Web 應(yīng)用程序正在 NetworkService 帳戶或自定義域帳戶下運行。如果應(yīng)用程序在本地帳戶(如 Windows 2000 Server 上的 ASPNET 帳戶)上運行,則使用 NTLM 身份驗證。

域帳戶的 Active Directory 中有一個服務(wù)主要名稱 (SPN),該域帳戶用于運行客戶端進行身份驗證所使用的服務(wù)。

客戶端計算機和服務(wù)器計算機至少需要運行 Windows 2000 Server,且處在相同的(即信任的)Windows 域中。

默認情況下,對于 Windows Server 2003 操作系統(tǒng)啟用集成 Windows 身份驗證。然而,如果 Windows Server 2003 Service Pack 1 (SP1) 作為 Windows Server 2003 操作系統(tǒng)整合安裝的一部分進行安裝,則默認情況下禁用集成 Windows 身份驗證。如果使用 SP1 升級 Windows Server 2003,則集成 Windows 身份驗證的設(shè)置與其 Windows Server 2003 設(shè)置相同。

應(yīng)該使用集成 Windows 身份驗證而不是基本身份驗證,因為前者避免了通過網(wǎng)絡(luò)傳輸用戶憑據(jù)。由于 Kerberos v5 身份驗證支持相互身份驗證,因此用戶還可以對正在連接的服務(wù)器進行身份驗證。

集成 Windows 身份驗證最適合于 Intranet 環(huán)境,其中的客戶端計算機和 Web 服務(wù)器計算機都是相同(即信任的)域的一部分。

NTLM 身份驗證

NTLM 是用于 Windows NT 和 Windows 2000 Server 工作組環(huán)境的身份驗證協(xié)議。它還用在必須對 Windows NT 系統(tǒng)進行身份驗證的混合 Windows 2000 Active Directory 域環(huán)境中。當 Windows 2000 Server 轉(zhuǎn)換為不存在下層 Windows NT 域控制器的本機模式時,禁用 NTLM。然后 Kerberos v5 變成企業(yè)級的默認身份驗證協(xié)議。

NTLM 身份驗證機制

圖 1 顯示 NTLM 協(xié)議。

1. NTLM 質(zhì)詢 / 應(yīng)答機制

下面概述質(zhì)詢/應(yīng)答機制:

用戶請求訪問。用戶嘗試通過提供用戶憑據(jù)登錄到客戶端。登錄前,客戶端計算機緩存密碼的哈希值并放棄密碼。客戶端向服務(wù)器發(fā)送一個請 求,該請求包括用戶名以及純文本格式的請求。

服務(wù)器發(fā)送質(zhì)詢消息。服務(wù)器生成一個稱為質(zhì)詢的 16 字節(jié)隨機數(shù)(即 NONCE),并將它發(fā)送到客戶端。

客戶端發(fā)送應(yīng)答消息。客戶端使用由用戶的密碼生成的一個密碼哈希值來加密服務(wù)器發(fā)送的質(zhì)詢。它以應(yīng)答的形式將這個加密的質(zhì)詢發(fā)回到服 務(wù)器。

服務(wù)器將質(zhì)詢和應(yīng)答發(fā)送到域控制器。服務(wù)器將用戶名、原始質(zhì)詢以及應(yīng)答從客戶端計算機發(fā)送到域控制器。

域控制器比較質(zhì)詢和應(yīng)答以對用戶進行身份驗證。域控制器獲取該用戶的密碼哈希值,然后使用該哈希值對原始質(zhì)詢進行加密。接下來,域控 制器將加密的質(zhì)詢與客戶端計算機的應(yīng)答進行比較。如果匹配,域控制器則發(fā)送該用戶已經(jīng)過身份驗證的服務(wù)器確認。

服務(wù)器向客戶端發(fā)送應(yīng)答。假定憑據(jù)有效,服務(wù)器授予對所請求的服務(wù)或資源的客戶端訪問權(quán)。

Kerberos 身份驗證

與 NTLM 身份驗證相比,Kerberos 身份驗證具有以下優(yōu)勢:

相互身份驗證。當客戶端使用 Kerberos v5 協(xié)議對特定服務(wù)器上的特定服務(wù)進行身份驗證,Kerberos 為客戶端提供網(wǎng)絡(luò)上惡意代碼不會模擬該服務(wù)的保證。

委托支持。使用 Kerberos 身份驗證對客戶端進行身份驗證的服務(wù)器可以模擬這些客戶端,并使用該客戶端的安全上下文訪問網(wǎng)絡(luò)資源。

性能。Kerberos 身份驗證提供優(yōu)于 NTLM 身份驗證的改進的性能。

簡化的信任管理。具有多個域的網(wǎng)絡(luò)不再需要一組復(fù)雜的顯式、點對點信任關(guān)系。

互操作性。Microsoft 實現(xiàn)的 Kerberos 協(xié)議基于向 Internet 工程任務(wù)組 (IETF) 推薦的標準跟蹤規(guī)范。因此,Windows 2000 中協(xié)議的實現(xiàn)為與其他網(wǎng)絡(luò)的互操作奠定了基礎(chǔ)(其中 Kerberos 版本 5 用于身份驗證)。

Kerberos 身份驗證機制

圖 2 顯示 Kerberos 身份驗證協(xié)議的簡化視圖。

2. Kerberos 身份驗證

當客戶端對網(wǎng)絡(luò)服務(wù)進行身份驗證之后,Kerberos v5 協(xié)議遵循以下步驟:

客戶端從 KDC 請求 TGT。用戶試圖通過提供用戶憑據(jù)登錄到客戶端。客戶端計算機 上的 Kerberos 服務(wù)向密鑰發(fā)行中心 (KDC) 發(fā)送一個 Kerberos 身份驗證服務(wù)請求。該請求包含用戶名、請求票證授予票證(ticket-granting ticket,TGT)所獲取的服務(wù)信息,以及使用用戶的長期密鑰(即密碼)加密的時間戳。

在 Windows 2000 Server 或 Windows Server 2003 操作系統(tǒng)上,域控制器充當 KDC,而 Active Directory 宿主安全帳戶數(shù)據(jù)庫。

身份驗證服務(wù)發(fā)送加密的 TGT 和會話密鑰。KDC 為來自 Active Directory 的用戶獲取長期密鑰(即密碼),然后解密隨請求一起傳送的時間戳。如果該時間戳有效,則用戶是真正的用戶。KDC 身份驗證服務(wù)創(chuàng)建一個登錄會話密鑰,并使用用戶的長期密鑰對該副本進行加密。然后,該身份驗證服務(wù)創(chuàng)建一個 TGT,它包括用戶信息和登錄會話密鑰。最后,該身份驗證服務(wù)使用自己的密鑰加密 TGT,并將加密的會話密鑰和加密的 TGT 傳遞給客戶端。

客戶端從 TGT 請求服務(wù)器訪問。客戶端使用其長期密鑰(即密碼)解密登錄會話密鑰,并在本地緩存 它。此外,客戶端還將加密的 TGT 存儲在它的緩存中。訪問網(wǎng)絡(luò)服務(wù)時,客戶端向 KDC 票證授予服務(wù)(ticket-granting service,TGS)發(fā)送一個包含信息的請求,這些信息包括用戶名、使用用戶登錄會話密鑰加密的驗證者消息、TGT,以及用戶想訪問的服務(wù)(和服務(wù) 器)名稱。

TGS 發(fā)送加密的會話密鑰和票證。KDC 上的 TGS 使用自己的密鑰解密 KDC 并提取登錄會話密鑰。它使用該登錄會話密鑰解密驗證者消息(通常是時間戳)。如果驗證者消息成功解密,TGS 從 TGT 提取用戶信息,并使用用戶信息創(chuàng)建一個用于訪問該服務(wù)的服務(wù)會話密鑰。它使用該用戶的登錄會話密鑰對該服務(wù)會話密鑰的一個副本進行加密,創(chuàng)建一個具有服務(wù) 會話密鑰和用戶信息的服務(wù)票證,然后使用該服務(wù)的長期密鑰(密碼)對該服務(wù)票證進行加密。然后,TGS 將加密的服務(wù)會話密鑰和服務(wù)票證添加到客戶端。

客戶端發(fā)送服務(wù)票證。客戶端訪問服務(wù)時,向服務(wù)器發(fā)送一個請求。該請求包含驗證者消息(時間戳),該消息使用服務(wù)會話密鑰和服務(wù)票證 進行加密。

服務(wù)器發(fā)送加密的時間戳以進行客戶端驗證。服務(wù)器解密服務(wù)票證并提取服務(wù)會話密鑰。通過使用服務(wù)會話密鑰,服務(wù)器解密驗證者消息(時 間戳)并計算它。如果驗證者通過測試,則服務(wù)器使用服務(wù)會話密鑰對驗證者(時間戳)進行加密,然后將驗證者傳回到客戶端。客戶端解密時間戳,如果該時間戳 與原始時間戳相同,則該服務(wù)是真正的,客戶端繼續(xù)連接。

服務(wù)的主要名稱

Kerberos v5 身份驗證協(xié)議之所以使用服務(wù)的主要名稱 (SPN),原因如下:

支持相互身份驗證。

允許一個客戶端請求票證,進而允許該客戶端與特定服務(wù)通訊。

例如,如果某個客戶端需要獲得一個票證,并對在偵聽端口 4766 運行的計算機 (MyServer) 上的特定服務(wù) (MyService) 進行身份驗證,則該客戶端使用根據(jù)該信息構(gòu)造的名稱從 KDC 請求一個票證,如下所示:

MyService/MyServer:4766

在 Active Directory 中注冊的 SPN 在該名稱和運行所請求的服務(wù)的域帳戶之間維護一個映射。通過使用該機制,惡意用戶難以在網(wǎng)絡(luò)上模擬服務(wù)。惡意用戶必須禁用實際服務(wù)并從該網(wǎng)絡(luò)移除實際服務(wù) 器。然后,惡意用戶必須向網(wǎng)絡(luò)中添加一臺同名的新計算機并公開重復(fù)的服務(wù)。由于客戶端使用具有相互身份驗證的 Kerberos v5 協(xié)議,因此該客戶端將無法使用重復(fù)的服務(wù),除非它可以提供配置實際服務(wù)進行運行的域帳戶的密碼。

Kerberos 身份驗證

與 NTLM 身份驗證相比,Kerberos 身份驗證具有以下優(yōu)勢:

相互身份驗證。當客戶端使用 Kerberos v5 協(xié)議對特定服務(wù)器上的特定服務(wù)進行身份驗證,Kerberos 為客戶端提供網(wǎng)絡(luò)上惡意代碼不會模擬該服務(wù)的保證。

委托支持。使用 Kerberos 身份驗證對客戶端進行身份驗證的服務(wù)器可以模擬這些客戶端,并使用該客戶端的安全上下文訪問網(wǎng)絡(luò)資源。

性能。Kerberos 身份驗證提供優(yōu)于 NTLM 身份驗證的改進的性能。

簡化的信任管理。具有多個域的網(wǎng)絡(luò)不再需要一組復(fù)雜的顯式、點對點信任關(guān)系。

互操作性。Microsoft 實現(xiàn)的 Kerberos 協(xié)議基于向 Internet 工程任務(wù)組 (IETF) 推薦的標準跟蹤規(guī)范。因此,Windows 2000 中協(xié)議的實現(xiàn)為與其他網(wǎng)絡(luò)的互操作奠定了基礎(chǔ)(其中 Kerberos 版本 5 用于身份驗證)。

Kerberos 身份驗證機制

圖 2 顯示 Kerberos 身份驗證協(xié)議的簡化視圖。

2. Kerberos 身份驗證

當客戶端對網(wǎng)絡(luò)服務(wù)進行身份驗證之后,Kerberos v5 協(xié)議遵循以下步驟:

客戶端從 KDC 請求 TGT。用戶試圖通過提供用戶憑據(jù)登錄到客戶端。客戶端計算機 上的 Kerberos 服務(wù)向密鑰發(fā)行中心 (KDC) 發(fā)送一個 Kerberos 身份驗證服務(wù)請求。該請求包含用戶名、請求票證授予票證(ticket-granting ticket,TGT)所獲取的服務(wù)信息,以及使用用戶的長期密鑰(即密碼)加密的時間戳。

在 Windows 2000 Server 或 Windows Server 2003 操作系統(tǒng)上,域控制器充當 KDC,而 Active Directory 宿主安全帳戶數(shù)據(jù)庫。

身份驗證服務(wù)發(fā)送加密的 TGT 和會話密鑰。KDC 為來自 Active Directory 的用戶獲取長期密鑰(即密碼),然后解密隨請求一起傳送的時間戳。如果該時間戳有效,則用戶是真正的用戶。KDC 身份驗證服務(wù)創(chuàng)建一個登錄會話密鑰,并使用用戶的長期密鑰對該副本進行加密。然后,該身份驗證服務(wù)創(chuàng)建一個 TGT,它包括用戶信息和登錄會話密鑰。最后,該身份驗證服務(wù)使用自己的密鑰加密 TGT,并將加密的會話密鑰和加密的 TGT 傳遞給客戶端。

客戶端從 TGT 請求服務(wù)器訪問。客戶端使用其長期密鑰(即密碼)解密登錄會話密鑰,并在本地緩存 它。此外,客戶端還將加密的 TGT 存儲在它的緩存中。訪問網(wǎng)絡(luò)服務(wù)時,客戶端向 KDC 票證授予服務(wù)(ticket-granting service,TGS)發(fā)送一個包含信息的請求,這些信息包括用戶名、使用用戶登錄會話密鑰加密的驗證者消息、TGT,以及用戶想訪問的服務(wù)(和服務(wù) 器)名稱。

TGS 發(fā)送加密的會話密鑰和票證。KDC 上的 TGS 使用自己的密鑰解密 KDC 并提取登錄會話密鑰。它使用該登錄會話密鑰解密驗證者消息(通常是時間戳)。如果驗證者消息成功解密,TGS 從 TGT 提取用戶信息,并使用用戶信息創(chuàng)建一個用于訪問該服務(wù)的服務(wù)會話密鑰。它使用該用戶的登錄會話密鑰對該服務(wù)會話密鑰的一個副本進行加密,創(chuàng)建一個具有服務(wù) 會話密鑰和用戶信息的服務(wù)票證,然后使用該服務(wù)的長期密鑰(密碼)對該服務(wù)票證進行加密。然后,TGS 將加密的服務(wù)會話密鑰和服務(wù)票證添加到客戶端。

客戶端發(fā)送服務(wù)票證。客戶端訪問服務(wù)時,向服務(wù)器發(fā)送一個請求。該請求包含驗證者消息(時間戳),該消息使用服務(wù)會話密鑰和服務(wù)票證 進行加密。

服務(wù)器發(fā)送加密的時間戳以進行客戶端驗證。服務(wù)器解密服務(wù)票證并提取服務(wù)會話密鑰。通過使用服務(wù)會話密鑰,服務(wù)器解密驗證者消息(時 間戳)并計算它。如果驗證者通過測試,則服務(wù)器使用服務(wù)會話密鑰對驗證者(時間戳)進行加密,然后將驗證者傳回到客戶端。客戶端解密時間戳,如果該時間戳 與原始時間戳相同,則該服務(wù)是真正的,客戶端繼續(xù)連接。

服務(wù)的主要名稱

Kerberos v5 身份驗證協(xié)議之所以使用服務(wù)的主要名稱 (SPN),原因如下:

支持相互身份驗證。

允許一個客戶端請求票證,進而允許該客戶端與特定服務(wù)通訊。

例如,如果某個客戶端需要獲得一個票證,并對在偵聽端口 4766 運行的計算機 (MyServer) 上的特定服務(wù) (MyService) 進行身份驗證,則該客戶端使用根據(jù)該信息構(gòu)造的名稱從 KDC 請求一個票證,如下所示:

MyService/MyServer:4766

在 Active Directory 中注冊的 SPN 在該名稱和運行所請求的服務(wù)的域帳戶之間維護一個映射。通過使用該機制,惡意用戶難以在網(wǎng)絡(luò)上模擬服務(wù)。惡意用戶必須禁用實際服務(wù)并從該網(wǎng)絡(luò)移除實際服務(wù) 器。然后,惡意用戶必須向網(wǎng)絡(luò)中添加一臺同名的新計算機并公開重復(fù)的服務(wù)。由于客戶端使用具有相互身份驗證的 Kerberos v5 協(xié)議,因此該客戶端將無法使用重復(fù)的服務(wù),除非它可以提供配置實際服務(wù)進行運行的域帳戶的密碼。

ASP.NET 身份驗證

IIS 向 ASP.NET 傳遞代表經(jīng)過身份驗證的用戶或匿名用戶帳戶的令牌。該令牌在一個包含在 IPrincipal 對象中的 IIdentity 對象中維護,IPrincipal 對象進而附加到當前 Web 請求線程。可以通過 HttpContext.User 屬性訪問 IPrincipalIIdentity 對象。這些對象和該屬性由身份驗證模塊設(shè)置,這些模塊作為 HTTP 模塊實現(xiàn)并作為 ASP.NET 管道的一個標準部分進行調(diào)用,如圖 3 所示。

3. ASP.NET 管道

ASP.NET 管道模型包含一個 HttpApplication 對象、多個 HTTP 模塊對象,以及一個 HTTP 處理程序?qū)ο蠹捌湎嚓P(guān)的工廠對象。HttpRuntime 對象用于處理序列的開頭。在整個請求生命周期中,HttpContext 對象用于傳遞有關(guān)請求和響應(yīng)的詳細信息。

有關(guān) ASP.NET 請求生命周期的詳細信息,請參閱"ASP.NET Life Cycle",網(wǎng)址是 http://msdn2.microsoft.com/library/ms227435(en-US,VS.80).aspx。

身份驗證模塊

ASP.NET 2.0 在計算機級別的 Web.config 文件中定義一組 HTTP 模塊。其中包括大量身份驗證模塊,如下所示:

httpModules> add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" /> add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" /> /httpModules>

只加載一個身份驗證模塊,這取決于該配置文件的 authentication 元素中指定了哪種身份驗證模式。該身份驗證模塊創(chuàng)建一個 IPrincipal 對象并將它存儲在 HttpContext.User 屬性中。這是很關(guān)鍵的,因為其他授權(quán)模塊使用該 IPrincipal 對象作出授權(quán)決定。

當 IIS 中啟用匿名訪問且 authentication 元素的 mode 屬性設(shè)置為 none 時,有一個特殊模塊將默認的匿名原則添加到 HttpContext.User 屬性中。因此,在進行身份驗證之后,HttpContext.User 絕不是一個空引用(在 Visual Basic 中為 Nothing)。

WindowsAuthenticationModule

如果 Web.config 文件包含以下元素,則激活 WindowsAuthenticationModule 類。

authentication mode="Windows" />

WindowsAuthenticationModule 類負責創(chuàng)建 WindowsPrincipalWindowsIdentity 對象來表示經(jīng)過身份驗證的用戶,并且負責將這些對象附加到當前 Web 請求。

對于 Windows 身份驗證,遵循以下步驟:

  • WindowsAuthenticationModule 使用從 IIS 傳遞到 ASP.NET 的 Windows 訪問令牌創(chuàng)建一個 WindowsPrincipal 對象。該令牌包裝在 HttpContext 類的 WorkerRequest 屬性中。引發(fā) AuthenticateRequest 事件時,WindowsAuthenticationModuleHttpContext 類檢索該令牌并創(chuàng)建 WindowsPrincipal 對象。HttpContext.User 用該 WindowsPrincipal 對象進行設(shè)置,它表示所有經(jīng)過身份驗證的模塊和 ASP.NET 頁的經(jīng)過身份驗證的用戶的安全上下文。

  • WindowsAuthenticationModule 類使用 P/Invoke 調(diào)用 Win32 函數(shù)并獲得該用戶所屬的 Windows 組的列表。這些組用于填充 WindowsPrincipal 角色列表。

  • WindowsAuthenticationModule 類將 WindowsPrincipal 對象存儲在 HttpContext.User 屬性中。隨后,授權(quán)模塊用它對經(jīng)過身份驗證的用戶授權(quán)。

    注: DefaultAuthenticationModule 類(也是 ASP.NET 管道的一部分)將 Thread.CurrentPrincipal 屬性設(shè)置為與 HttpContext.User 屬性相同的值。它在處理 AuthenticateRequest 事件之后進行此操作。

授權(quán)模塊

WindowsAuthenticationModule 類完成其處理之后,如果未拒絕請求,則調(diào)用授權(quán)模塊。授權(quán)模塊也在計算機級別的 Web.config 文件中的 httpModules 元素中定義,如下所示:

httpModules> add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" /> add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" /> add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" /> /httpModules>

UrlAuthorizationModule

調(diào)用 UrlAuthorizationModule 類時,它在計算機級別或應(yīng)用程序特定的 Web.config 文件中查找 authorization 元素。如果存在該元素,則 UrlAuthorizationModule 類從 HttpContext.User 屬性檢索 IPrincipal 對象,然后使用指定的動詞(GET、POST 等)來確定是否授權(quán)該用戶訪問請求的資源。

FileAuthorizationModule

接下來,調(diào)用 FileAuthorizationModule 類。它檢查 HttpContext.User.Identity 屬性中的 IIdentity 對象是否是 WindowsIdentity 類的一個實例。如果 IIdentity 對象不是 WindowsIdentity 類的一個實例,則 FileAuthorizationModule 類停止處理。

如果存在 WindowsIdentity 類的一個實例,則 FileAuthorizationModule 類調(diào)用 AccessCheck Win32 函數(shù)(通過 P/Invoke)來確定是否授權(quán)經(jīng)過身份驗證的客戶端訪問請求的文件。如果該文件的安全描述符的隨機訪問控制列表 (DACL) 中至少包含一個 Read 訪問控制項 (ACE),則允許該請求繼續(xù)。否則,FileAuthorizationModule 類調(diào)用 HttpApplication.CompleteRequest 方法并將狀態(tài)碼 401 返回到客戶端。

安全上下文

.NET Framework 使用以下兩個接口封裝 Windows 令牌和登錄會話:

  • System.Security.Principal.IPrincipal

  • System.Security.Principal.IIdentity(它公開為 IPrincipal 接口中的一個屬性。)

HttpContext.User

在 ASP.NET 中,用 WindowsPrincipalWindowsIdentity 類表示使用 Windows 身份驗證進行身份驗證的用戶的安全上下文。使用 Windows 身份驗證的 ASP.NET 應(yīng)用程序可以通過 HttpContext.User 屬性訪問 WindowsPrincipal 類。

要檢索啟動當前請求的 Windows 經(jīng)過身份驗證的用戶的安全上下文,使用以下代碼:

using System.Security.Principal; ... // Obtain the authenticated user's Identity WindowsPrincipal winPrincipal = (WindowsPrincipal)HttpContext.Current.User;

WindowsIdentity.GetCurrent

WindowsIdentity.GetCurrent 方法可用于獲得當前運行的 Win32 線程的安全上下文的標識。如果不使用模擬,線程繼承 IIS 6.0(默認情況下的 NetworkService 帳戶)上進程的安全上下文。

該安全上下文在訪問本地資源時使用。通過使用經(jīng)過身份驗證的初始用戶的安全上下文或使用固定標識,您可以使用模擬重寫該安全上下文。

要檢索運行應(yīng)用程序的安全上下文,使用以下代碼:

using System.Security.Principal; ... // Obtain the authenticated user's identity. WindowsIdentity winId = WindowsIdentity.GetCurrent(); WindowsPrincipal winPrincipal = new WindowsPrincipal(winId);

Thread.CurrentPrincipal

ASP.NET 應(yīng)用程序中的每個線程公開一個 CurrentPrincipal 對象,該對象保存經(jīng)過身份驗證的初始用戶的安全上下文。該安全上下文可用于基于角色的授權(quán)。

要檢索線程的當前原則,使用以下代碼:

using System.Security.Principal; ... // Obtain the authenticated user's identity WindowsPrincipal winPrincipal = (WindowsPrincipal) Thread.CurrentPrincipal();

表 1 顯示從各種標識屬性獲得的結(jié)果標識,當您的應(yīng)用程序使用 Windows 身份驗證且 IIS 配置為使用集成 Windows 身份驗證時,可以從 ASP.NET 應(yīng)用程序使用這些標識屬性。

 

表 1:線程公開的 CurrentPrincipal Object

Web.config 設(shè)置

變量位置

結(jié)果標識

identity impersonate="true"/>
authentication mode="Windows" />

HttpContext
WindowsIdentity
線程

Domain\UserName
Domain\UserName
Domain\UserName

identity impersonate="false"/>
authentication mode="Windows" />

HttpContext
WindowsIdentity
線程

Domain\UserName
NT AUTHORITY\NETWORK SERVICE
Domain\UserName

identity impersonate="true"/>
authentication mode="Forms" />

HttpContext
WindowsIdentity
線程

用戶提供的名稱
Domain\UserName
用戶提供的名稱

identity impersonate="false"/>
authentication mode="Forms" />

HttpContext
WindowsIdentity
線程

用戶提供的名稱
NT AUTHORITY\NETWORK SERVICE
用戶提供的名稱

 

返 回頁首

模擬

ASP.NET 應(yīng)用程序可以使用模擬來執(zhí)行操作,使用經(jīng)過身份驗證的客戶端或特定 Windows 帳戶的安全上下文來訪問資源。

初始用戶模擬

要模擬初始(經(jīng)過身份驗證的)用戶,請在 Web.config 文件中使用以下配置:

authentication mode="Windows" /> identity impersonate="true" />

使用該配置,ASP.NET 始終模擬經(jīng)過身份驗證的用戶,且所有資源訪問均使用經(jīng)過身份驗證的用戶的安全上下文執(zhí)行。如果您的應(yīng)用程序的虛擬目錄上啟用了匿名訪問,則模擬 IUSR_MACHINENAME 帳戶。

要暫時模擬經(jīng)過身份驗證的調(diào)用方,將 identity 元素的 impersonate 屬性設(shè)置為 false, 然后使用以下代碼:

using System.Security.Principal; ... // Obtain the authenticated user's identity. WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity; WindowsImpersonationContext ctx = null; try { // Start impersonating. ctx = winId.Impersonate(); // Now impersonating. // Access resources using the identity of the authenticated user. } // Prevent exceptions from propagating. catch { } finally { // Revert impersonation. if (ctx != null) ctx.Undo(); } // Back to running under the default ASP.NET process identity.

這段代碼模擬經(jīng)過身份驗證的初始用戶。在 HttpContext.Current.User.Identity 對象中維護初始用戶的標識和 Windows 令牌。

固定標識模擬

如果需要在應(yīng)用程序的整個生命周期中模擬相同的標識,可以在 Web.config 文件中的 identity 元素上指定憑據(jù)。以下示例顯示如何模擬名為"TestUser"的 Windows 帳戶。

如果使用該方法,應(yīng)該對這些憑據(jù)進行加密。使用 ASP.NET 2.0,您可以使用 ASP.NET IIS 注冊工具 (Aspnet_regiis.exe)。使用 ASP.NET 1.1 版,您可以使用 Aspnet_setreg.exe 實用工具。有關(guān)該實用工具的詳細信息,請參閱 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpgrfaspnetiisregistrationtoolaspnet_regiisexe.asp。

要在 ASP.NET 應(yīng)用程序中使用固定標識進行資源訪問,可使用 Windows 2000 Server 或 Windows Server 2003 上的 identity 元素來配置憑據(jù)。如果正在運行 Windows Server 2003,其中的 IIS 6.0 配置為運行在輔助進程隔離模式下(默認情況),則可通過將 ASP.NET 應(yīng)用程序配置為在自定義應(yīng)用程序池(在特定的域標識下運行)中運行來避免模擬。然后,可以使用指定的域標識訪問資源而無需使用模擬。

返 回頁首

委托

模擬只提供對本地資源的訪問。委托是一個擴展的模擬功能,它允許您使用模擬令牌訪問網(wǎng)絡(luò)資源。

如果應(yīng)用程序使用 Kerberos v5 身份驗證對其用戶進行身份驗證,則可使用 Kerberos 委托在應(yīng)用程序的各層傳遞用戶標識并訪問網(wǎng)絡(luò)資源。如果應(yīng)用程序不使用 Kerberos v5 身份驗證,則可使用協(xié)議轉(zhuǎn)換切換到 Kerberos,然后使用委托傳遞該標識。

Windows Server 2003 中的約束委托需要 Kerberos 身份驗證。如果您的應(yīng)用程序無法使用 Kerberos 身份驗證對其調(diào)用方進行身份驗證,您可以使用協(xié)議轉(zhuǎn)換從可選的非 Windows 身份驗證模式(如,窗體或證書身份驗證)切換到 Kerberos 身份驗證。然后,可使用具有約束委托的 Kerberos 訪問下游網(wǎng)絡(luò)資源。

約束的和未約束的委托

Windows 2000 Server 上的 Kerberos 委托是未約束的。Active Directory 中配置了委托的服務(wù)器可在使用模擬的用戶安全上下文的同時訪問任何網(wǎng)絡(luò)資源或網(wǎng)絡(luò)上的任何計算機。這會帶來潛在的安全威脅,尤其是 Web 服務(wù)器遭受惡意用戶攻擊時。

為了解決該安全問題,Windows Server 2003 引入了約束的委托。這使管理員能夠在使用模擬的用戶安全上下文時準確 指定另一個服務(wù)器或域帳戶可以訪問的服務(wù)。

配置委托

要使用 Kerberos 委托,需要適當?shù)?Active Directory 配置。

要授予 Web 服務(wù)器委托客戶端憑據(jù)的權(quán)限,請按以下方式配置 Active Directory:

  • 如果在 NetworkService 帳戶下運行應(yīng)用程序,Web 服務(wù)器計算機帳戶必須在 Active Directory 中標記為受信任委托。

  • 如果在自定義域帳戶下運行應(yīng)用程序,該用戶帳戶必須在 Active Directory 中標記為受信任委托。

  • 如果應(yīng)用程序模擬一個用戶帳戶,請確保應(yīng)用程序模擬的用戶帳戶在 Active Directory 中未標記為"敏感帳戶,不能被委托"。

有關(guān)協(xié)議轉(zhuǎn)換和約束委托的詳細信息,請參閱 How To: Use Protocol Transition and Constrained Delegation in ASP.NET 2.0。

您可能感興趣的文章:
  • Asp.net Mvc 身份驗證、異常處理、權(quán)限驗證(攔截器)實現(xiàn)代碼
  • asp.net 驗證碼生成和刷新及驗證
  • ASP.net 驗證碼實現(xiàn)代碼(C#)
  • asp.net(C#) 生成隨機驗證碼的代碼
  • Asp.net(C#)實現(xiàn)驗證碼功能代碼
  • ASP.NET表單驗證方法詳解
  • jQuery 驗證插件 Web前端設(shè)計模式(asp.net)
  • 注冊頁實現(xiàn)激活郵箱驗證(asp.net c#)
  • asp.net 簡單驗證碼驗證實現(xiàn)代碼
  • .net MVC中使用forms驗證詳解

標簽:西雙版納 萊蕪 朔州 常州 孝感 許昌 自貢 信陽

巨人網(wǎng)絡(luò)通訊聲明:本文標題《asp.net身份驗證方式介紹》,本文關(guān)鍵詞  asp.net,身份,驗證,方式,介紹,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《asp.net身份驗證方式介紹》相關(guān)的同類信息!
  • 本頁收集關(guān)于asp.net身份驗證方式介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91在线视频免费91| 91精品婷婷国产综合久久性色| 不卡的电影网站| 欧美一级专区免费大片| 亚洲欧美另类图片小说| 国产精品一区二区果冻传媒| 欧美日韩高清一区二区不卡 | 欧美色偷偷大香| 国产女人18水真多18精品一级做| 亚洲第一二三四区| 91一区二区在线| 国产清纯白嫩初高生在线观看91| 人人精品人人爱| 91成人免费电影| 亚洲欧洲精品一区二区三区不卡| 老司机精品视频线观看86| 欧美亚洲国产一区在线观看网站| 中文字幕视频一区| 国产一区二区三区| 精品日韩成人av| 老司机免费视频一区二区| 91麻豆精品国产自产在线观看一区 | 亚洲免费大片在线观看| 国产高清精品久久久久| 久久久精品免费网站| 国产综合久久久久久久久久久久 | 国内精品久久久久影院色| 欧美一区二区三区免费在线看| 亚洲无人区一区| 欧美高清精品3d| 亚洲国产cao| 欧美精品久久99久久在免费线 | 亚洲人成影院在线观看| 高清国产午夜精品久久久久久| 久久精品亚洲国产奇米99| 国产精品亚洲综合一区在线观看| 久久久久久久av麻豆果冻| 国产成人鲁色资源国产91色综| 精品福利二区三区| 成人综合日日夜夜| 亚洲四区在线观看| 欧美日韩国产综合一区二区 | 99v久久综合狠狠综合久久| 国产精品久久久久久久裸模| 99久久免费精品| 亚洲国产美女搞黄色| 欧美顶级少妇做爰| 久久99精品国产麻豆不卡| 久久久久9999亚洲精品| 风间由美一区二区av101| 国产精品污www在线观看| 色偷偷一区二区三区| 亚洲va欧美va人人爽| 日韩美一区二区三区| 成人性视频网站| 亚洲国产精品久久久久婷婷884| 欧美一区二区三区在线视频 | 亚洲天堂av一区| 欧美精选在线播放| 国产一区二区在线观看视频| 亚洲欧洲av在线| 在线成人免费视频| 成人一二三区视频| 亚洲成国产人片在线观看| 欧美大片拔萝卜| 不卡一二三区首页| 日本成人在线不卡视频| 国产色产综合色产在线视频| 日本丶国产丶欧美色综合| 日韩二区三区四区| 中文字幕中文字幕在线一区| 欧美日韩黄色影视| 成人动漫视频在线| 青青国产91久久久久久| 亚洲乱码中文字幕| 精品久久一二三区| 欧美日韩一区二区三区免费看| 精品一区二区在线看| 亚洲国产一区在线观看| 久久久.com| 欧美一级高清片在线观看| 色综合久久中文字幕| 黑人巨大精品欧美一区| 五月天亚洲精品| 亚洲精品亚洲人成人网| 日本一区二区视频在线| 欧美一区二区三区在线看| 在线观看精品一区| 成人黄色在线看| 国产在线国偷精品免费看| 亚洲va天堂va国产va久| 中文字幕一区免费在线观看| 26uuu色噜噜精品一区二区| 亚洲精品国产无套在线观 | 欧美天堂一区二区三区| 五月婷婷久久综合| 亚洲最新在线观看| 717成人午夜免费福利电影| 天堂久久久久va久久久久| 欧美日韩一区二区三区高清 | 日韩精品一二区| 欧洲精品视频在线观看| 亚洲精品一区在线观看| 成人夜色视频网站在线观看| 免费看黄色91| 亚洲电影一级片| 亚洲国产高清在线观看视频| 色美美综合视频| 成人动漫av在线| 99久久久精品| 国产精品白丝jk黑袜喷水| 亚洲午夜电影在线| 国产欧美日韩精品a在线观看| 91成人免费在线| 亚洲国产成人va在线观看天堂| 欧美电影免费观看高清完整版在线观看| 日韩成人一级片| 国产精品乱码一区二区三区软件| 精品视频全国免费看| 韩国av一区二区三区在线观看| 亚洲在线视频一区| 中文字幕不卡在线观看| 日韩精品一区二区三区老鸭窝 | 亚洲美女淫视频| 精品久久人人做人人爱| 91成人在线精品| 国产成人精品免费网站| 久久国产尿小便嘘嘘| 亚洲夂夂婷婷色拍ww47| 夜夜夜精品看看| 国产精品视频yy9299一区| 精品福利一区二区三区免费视频| 欧美中文一区二区三区| 福利一区福利二区| 丁香婷婷综合激情五月色| 日本精品视频一区二区| 久久福利视频一区二区| 欧美日韩精品一区二区三区四区| 免费观看在线综合| 琪琪久久久久日韩精品| 久久精品国产一区二区三| 日韩一区二区三区高清免费看看| 国内精品自线一区二区三区视频| 欧美日韩电影在线播放| 精品国产青草久久久久福利| 欧美激情一区二区在线| 亚洲欧美日韩国产中文在线| 日韩精彩视频在线观看| 国产成人精品影院| 欧美视频一区二| 久久久久免费观看| 亚洲色图欧美偷拍| 日韩电影在线一区二区三区| 白白色 亚洲乱淫| 色播五月激情综合网| 日韩免费性生活视频播放| 久久久亚洲高清| 亚洲成人在线观看视频| 青青草国产精品97视觉盛宴 | 精品国产免费久久| 欧美经典一区二区三区| 51精品久久久久久久蜜臀| 一区二区三区在线视频观看58| 青青草原综合久久大伊人精品| 久久久久久久久久久黄色| 91在线码无精品| 免费观看日韩电影| 亚洲一区在线免费观看| 久久久亚洲欧洲日产国码αv| 国产精品一区免费视频| 91色九色蝌蚪| 一区二区三区在线免费| 粉嫩绯色av一区二区在线观看| 91亚洲精华国产精华精华液| 精品久久久久久久久久久久包黑料| 久久国产三级精品| 91成人免费电影| 福利电影一区二区| 91精品黄色片免费大全| 最新国产精品久久精品| 国产尤物一区二区在线| 91精品国产91久久久久久一区二区 | 天天免费综合色| 色综合天天做天天爱| 国产欧美精品一区二区三区四区 | 亚洲国产一区在线观看| 欧美刺激午夜性久久久久久久 | 一区二区在线电影| 粉嫩蜜臀av国产精品网站| 亚洲精品在线观| 国产米奇在线777精品观看| 欧美肥妇毛茸茸| 天天影视色香欲综合网老头| 欧美电影在线免费观看| 一个色在线综合| 欧美在线你懂的| 午夜精品影院在线观看| 欧美性欧美巨大黑白大战| 亚洲一区二区三区美女| 在线播放亚洲一区|