SessionSecurityTokenHandler 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
處理型別為 SecurityTokenHandler 之安全性權杖的 SessionSecurityToken。
public ref class SessionSecurityTokenHandler : System::IdentityModel::Tokens::SecurityTokenHandler
public class SessionSecurityTokenHandler : System.IdentityModel.Tokens.SecurityTokenHandler
type SessionSecurityTokenHandler = class
inherit SecurityTokenHandler
Public Class SessionSecurityTokenHandler
Inherits SecurityTokenHandler
- 繼承
- 衍生
範例
下列 XML 示範如何將令牌處理程式集合中的預設工作階段安全性令牌處理程式取代為組態中 類別的 MachineKeySessionSecurityTokenHandler 實例。
<securityTokenHandlers>
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
備註
類別會 SessionSecurityTokenHandler 串行化、還原串行化及驗證會話令牌。 會話令牌是 類型的 SessionSecurityToken令牌。 類別會將 SessionSecurityTokenHandler 令牌串行化至 Cookie 格式和從 Cookie 格式串行化。 根據預設,類別會將標記串行化為 WS-Secure Conversation 2005 或 WS-Secure Conversation 1.3 <wsc:SecurityContextToken>
元素。 會話令牌是由 WSFederationAuthenticationModule (WSFAM) 和 SessionAuthenticationModule (SAM) 用來儲存會話的相關信息,這主要是 ClaimsPrincipal 與已驗證的使用者和會話的開始和到期時間相關聯。
在被動案例中 WSFederationAuthenticationModuleSessionAuthenticationModule ,從驗證管線呼叫 (SAM) ,以從 ClaimsPrincipal 代表已驗證使用者的 建立會話令牌。 SAM 會使用其 SessionSecurityTokenHandler 設定來建立令牌,並將它串行化為cookie (,並在後續要求上從Cookie還原串行化令牌) 。 SAM 會使用其已設定 CookieHandler 類別的實例,將 Cookie 寫回 HTTP 回應。 接著,此 Cookie 會傳回給用戶端,並在後續的要求上呈現 Cookie,而不是讓身分識別提供者往返以重新取得安全性令牌。 如需會話如何使用 WIF 運作的詳細資訊,請參閱 WIF 工作階段管理。
注意
securityTokenHandlers> 組<態項目可用來指定SessionSecurityTokenHandler負責保護應用程式工作階段的 。 開發人員在變更此組態設定時應該小心,因為設定錯誤的系統可能會導致應用程式遭到入侵。 例如,指定衍生 SessionSecurityTokenHandler 的 ,並將空的 Transforms (CookieTransform) 集合傳遞至基底,會導致使用者身分識別串行化為未受保護的 Cookie。 這可讓攻擊者修改身分識別,因此變更訪問許可權。
如果會話令牌處於參考模式,也就是其 SessionSecurityToken.IsReferenceMode 屬性為 true
,則會話令牌處理程式只會串行化會話令牌的屬性,而該會話令牌只會在 中 SessionSecurityTokenCache重新產生其密鑰所需的屬性。 在預設案例中,類別 SessionSecurityTokenCacheKey 是用來表示快取索引鍵,而令牌處理程式會 SessionSecurityToken.ContextId 寫入令牌的 和 SessionSecurityToken.KeyGeneration 屬性。 如果會話令牌不在參考模式中,也就是說,SessionSecurityToken.IsReferenceModefalse
除了先前所述的屬性之外,處理程式也會在從令牌串行化的位元組陣列上叫ApplyTransforms用 方法,並將產生的值儲存在 Cookie 中。 如需如何串行化令牌的詳細資訊,請參閱 SessionSecurityTokenHandler.WriteToken(XmlWriter, SecurityToken) 方法。
屬性 Transforms 會取得套用至 方法中會話令牌的 ApplyTransforms 轉換清單。 所有轉換都衍生自 CookieTransform 類別。 在預設案例 DeflateCookieTransform 中,會套用 和 ProtectedDataCookieTransform 。 會 ProtectedDataCookieTransform 使用數據保護 API (DPAPI) 來保護 Cookie 數據。 DPAPI 會使用它在其保護演算法中執行之電腦專用的金鑰。 基於這個理由,預設會話令牌處理程式無法在 Web 伺服器數位案例中使用,因為在這類情況下,在一部電腦上寫入的令牌可能需要在另一部計算機上讀取。 您可以使用許多策略來規避此問題。 例如,您可以:
將預設值 SessionSecurityTokenHandler 取代為 MachineKeySessionSecurityTokenHandler。 MachineKeySessionSecurityTokenHandler可讓您在組態檔中的 ASP.NET
<machineKey>
元素下指定簽署和加密金鑰。提供 global.asax.cs 檔案中事件的處理程式FederatedAuthentication.FederationConfigurationCreated,並將預設會話令牌處理程式取代為的實例SessionSecurityTokenHandler,其中包含和RsaEncryptionCookieTransform的轉換RsaSignatureCookieTransform清單。 您可以叫用其中一個採用轉換清單的建構函式來建立新的實例。
從基類衍生自定義轉換, CookieTransform 並使用上述方法將它包含在要套用的轉換清單中。
從 SessionSecurityTokenHandler 衍生自定義令牌處理程式,並實作您自己的機制。
如需在 Web 伺服器陣列案例中使用工作階段的詳細資訊,請參閱 WIF 和 Web 伺服器陣列。
SessionSecurityTokenHandler包含在預設令牌處理程式集合中;不過,您可以先在 securityTokenHandlers> 元素下<指定 <remove> 元素,以將它取代為自定義會話令牌處理程式,以從集合中移除默認處理程式,然後使用 add> 元素新增自定義令牌處理程式<。 根據預設,您可以指定預設令牌存留期,方法是在 元素下<add>
加入 <sessionTokenRequirement> 元素。 您可以藉由覆LoadCustomConfiguration寫 方法來提供處理這些元素的<add>
邏輯,來設計自定義令牌處理程式,以在 元素下採用自定義組態專案。
建構函式
SessionSecurityTokenHandler() |
初始化 SessionSecurityTokenHandler 類別的新執行個體,這個執行個體使用預設 cookie 轉換和權杖存留期。 |
SessionSecurityTokenHandler(ReadOnlyCollection<CookieTransform>) |
初始化 SessionSecurityTokenHandler 類別的新執行個體,這個執行個體使用指定的 Cookie 轉換。 |
SessionSecurityTokenHandler(ReadOnlyCollection<CookieTransform>, TimeSpan) |
初始化 SessionSecurityTokenHandler 類別的新執行個體,這個執行個體使用指定的 cookie 轉換和權杖存留期。 |
欄位
DefaultCookieTransforms |
唯讀集合,包含套用至 Cookie 的預設轉換清單:DeflateCookieTransform 和 ProtectedDataCookieTransform。 |
DefaultLifetime |
為 Cookie 指定預設存留期的常數 (十小時)。 |
屬性
CanValidateToken |
取得值,指出這個處理常式是否支援驗證 SessionSecurityToken 型別的權杖。 |
CanWriteToken |
取得值,指出這個處理常式是否可寫入 SessionSecurityToken 型別的權杖。 |
Configuration |
取得或設定為目前執行個體提供組態的 SecurityTokenHandlerConfiguration 物件。 (繼承來源 SecurityTokenHandler) |
ContainingCollection |
取得包含目前執行個體的權杖處理常式集合。 (繼承來源 SecurityTokenHandler) |
CookieElementName |
取得 Cookie 項目的名稱。 |
CookieNamespace |
取得 Cookie 項目的命名空間。 |
DefaultTokenLifetime |
取得預設權杖存留期。 |
TokenLifetime |
取得或設定語彙基元存留期。 |
TokenType |
取得這個處理常式處理的權杖類型。 |
Transforms |
取得會套用至 Cookie 的轉換。 |