什麼是 Windows Identity Foundation?

WIF 標誌

Windows® Identity Foundation (WIF) 是建立身分識別感知應用程式的架構。 此架構會摘要 WS-Trust 和 WS-Federation 通訊協定,並為開發人員提供用於建立安全性權杖服務和宣告感知應用程式的 API。 應用程式可以使用 WIF 來處理從安全性權杖服務簽發的權杖,然後在 Web 應用程式或 Web 服務進行以身分識別為依據的決策。

WIF 擁有下列主要功能:

  • 建立宣告感知應用程式 (信賴憑證者應用程式)。WIF 可協助開發人員建立宣告感知應用程式。 除了提供新的宣告模型之外,它還可為應用程式開發人員提供一套豐富的 API,有助於依據宣告做出使用者存取決策。無論開發人員選擇在 ASP.NET 或在 WCF 環境中建立自己的應用程式,WIF 都能為其提供一致的程式設計經驗。 如需相關資訊,請參閱宣告取用者 - 信賴憑證者應用程式

  • Visual Studio 範本。 WIF 提供適用於宣告感知 ASP.NET 網站和 WCF Web 服務應用程式的內建 Visual Studio 範本,並且能夠降低熟悉宣告感知型程式設計模型的學習曲線。 如需相關資訊,請參閱 Visual Studio 範本

  • 在宣告感知應用程式和 STS 之間輕鬆建立信任關係。 WIF 提供名為 FedUtil 的公用程式,可用來輕鬆建立宣告感知應用程式與 STS (例如 Active Directory Federation Services 2.0 或 LiveID STS) 之間的信任關係。 FedUtil 可同時支援 ASP.NET 和 WCF 應用程式。 而且它已經與 Visual Studio 整合,因此只要在專案上按一下滑鼠右鍵,然後選擇 [新增 STS 參考] 功能表項目,或是從 Visual Studio 中的 [工具] 功能表選擇,就可以從方案總管叫用它。 如需相關資訊,請參閱 FedUtil - 用於建立 RP 和 STS 之間信任的同盟公用程式

  • ASP.NET 控制項。ASP.NET 控制項可簡化用於建立宣告感知 Web 應用程式的 ASP.NET 頁面開發工作。 如需相關資訊,請參閱使用 FederatedPassiveSignIn 控制項建立 ASP.NET 信賴憑證者應用程式與 STS 之間的信任

  • 宣告與 NT 權杖之間的轉譯。 WIF 包含名為 的 Windows 服務,可以當做宣告感知應用程式與 NT 權杖式應用程式之間的橋樑。 它為開發人員提供了一種簡便的方法,將宣告轉換為 NT 權杖身分識別,以便從宣告感知應用程式存取需要 NT 權杖身分識別的資源。 如需相關資訊,請參閱 Claims to Windows Token Service (c2WTS) 概觀

  • 將身分識別委派支援建置於宣告感知應用程式中。 WIF 提供可以跨多重服務界限維護原始要求者身分識別的能力。 這種能力可以透過使用此架構中的 ActAs 或 OnBehalfOf 功能來達成,而且它為開發人員提供了將身分識別委派支援加入到宣告感知應用程式的能力。 如需相關資訊,請參閱 與 IIdentity 和 IPrincipal 進行整合以及身分識別委派案例

  • 建立自訂的安全性權杖服務 (STS)。 WIF 可以讓您更輕鬆地建立支援 WS-Trust 通訊協定的自訂安全性權杖服務 (STS)。 這類 STS 也稱為「主動 STS」。

    此外,此架構也為建立能支援 WS-同盟來啟用網頁瀏覽器用戶端的 STS 提供支援。 這類 STS 也稱為「被動 STS」。

    此架構提供了一些內建 Visual Studio 範本,可用來建置 ASP.NET STS 和 WCF STS;這些範本會建立簡單的 STS,而開發人員可以擴充這些 STS 並且實作適合自己需求的實際 STS。 如需相關資訊,請參閱 HOW TO:建立 ASP.NET STSHOW TO:建立 WCF STS

WIF 支援下列主要案例:

  • 同盟:WIF 可以在兩個以上的夥伴之間建立同盟。 它對建立宣告感知應用程式 (RP) 和自訂安全性權杖服務 (STS) 的支援,可協助開發人員達成這種案例。 如需相關資訊,請參閱同盟案例

  • 身分識別委派: WIF 可以跨服務界限輕鬆維護身分識別,讓開發人員能夠達成身分識別委派的案例。 如需相關資訊,請參閱身分識別委派案例

  • 升級驗證: 應用程式中對不同資源的驗證需求可能不盡相同。 WIF 提供的能力可讓開發人員建立能夠要求增加驗證需求的應用程式 (例如,以使用者名稱/密碼進行初始登入,然後再升級為智慧卡驗證)。 如需相關資訊,請參閱升級驗證案例

使用 WIF 將讓您更容易獲得本主題中所述宣告式身分識別模型的好處。 本主題提供 Windows® Identity Foundation (WIF) 針對處理宣告所提供新功能的概觀。 如需相關資訊,請參閱適用開發人員的 Windows Identity Foundation 白皮書 (英文)。

透過 Thread.CurrentPrincipal 存取宣告

若要在 RP 應用程式中存取目前使用者的宣告集,請使用 Thread.CurrentPrincipal

下列程式碼範例示範如何使用此方法取得 IClaimsIdentity

IClaimsIdentity claimsIdentity = ((IClaimsPrincipal)Thread.CurrentPrincipal).Identities[0];

如需相關資訊,請參閱 HOW TO:存取 ASP.NET 頁面內的宣告

角色宣告類型

設定 RP 應用程式的一部分是決定您的角色宣告類型為何。 此宣告類型為 IsInRole 所使用。 預設的宣告類型為 https://schemas.microsoft.com/ws/2008/06/identity/claims/role

Windows Identity Foundation 從不同的權杖類型擷取的宣告

WIF 支援數種立即可用的驗證機制組合。 下表列出 WIF 從不同權杖類型擷取的宣告。

權杖類型

產生的宣告

對應至 Windows 存取權杖

SAML 1.1

  1. 所有來自 GetOutputClaimsIdentity 的宣告

  2. 包含確認金鑰之 XML 序列化的 https://schemas.microsoft.com/ws/2008/06/identity/claims/confirmationkey 宣告 (如果權杖包含證明權杖)。

  3. 來自 Issuer 元素的 https://schemas.microsoft.com/ws/2008/06/identity/claims/samlissuername 宣告。

  4. 如果權杖包含驗證陳述式,則產生 AuthenticationMethod 和 AuthenticationInstant 宣告。

除了 "SAML 1.1" 中列出的宣告之外 (但不包括 https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name 類型的宣告),將會加入與 Windows 驗證相關的宣告,而身分識別會以 WindowsClaimsIdentity 代表。

SAML 2.0

與 "SAML 1.1" 相同。

與「對應 Windows 帳戶的 SAML 1.1」相同。

X509

  1. 具有 X500 分辨名稱、emailName、dnsName、SimpleName、UpnName、UrlName、指紋、RsaKey (可以使用 X509Certificate2.PublicKey.Key 屬性中的 RSACryptoServiceProvider.ExportParameters 方法擷取)、DsaKey (可以使用 X509Certificate2.PublicKey.Key 屬性中的 DSACryptoServiceProvider.ExportParameters 方法擷取)、X509 憑證中 SerialNumber 屬性的宣告。

  2. 值為 https://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/x509 的 AuthenticationMethod 宣告。 AuthenticationInstant 宣告,其值為以 XmlSchema DateTime 格式表示的憑證驗證時間。

  1. 它會使用 Windows 帳戶的完整網域名稱做為 https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name 宣告值。 .

  2. 未對應至 Windows 之 X509 憑證中的宣告,以及將憑證對應至 Windows 而取得之 Windows 帳戶中的宣告。

UPN

  1. 宣告與 Windows 驗證區段中的宣告類似。

  2. 值為 https://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/password 的 AuthenticationMethod 宣告。 AuthenticationInstant 宣告,其值為以 XmlSchema DateTime 格式表示的密碼驗證時間。

 

Windows (Kerberos 或 NTLM)

  1. 產生自存取權杖的宣告,這類權杖包括:PrimarySID、DenyOnlyPrimarySID、PrimaryGroupSID、DenyOnlyPrimaryGroupSID、GroupSID、DenyOnlySID 和 Name

  2. 值為 https://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/ 且包含驗證 SSp 之小寫名稱的 AuthenticationMethod (例如 Kerberos、NTML、Negotiate 等)。 AuthenticationInstant,其值為以 XMLSchema DateTime 格式表示的 Windows 存取權杖建立時間。

 

RSA 金鑰組

  1. https://schemas.xmlsoap.org/ws/2005/05/identity/claims/rsa 宣告,其值為 RSAKeyValue。

  2. 值為 https://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/signature 的 AuthenticationMethod 宣告。 AuthenticationInstant 宣告,其值為以 XMLSchema DateTime 格式表示的 RSA 金鑰驗證 (也就是驗證簽章) 的時間。

驗證類型

"AuthenticationMethod" 宣告中發出的 URI

密碼

urn:oasis:names:tc:SAML:1.0:am:password

Kerberos

urn:ietf:rfc:1510

SecureRemotePassword

urn:ietf:rfc:2945

TLSClient

urn:ietf:rfc:2246

X509

urn:oasis:names:tc:SAML:1.0:am:X509-PKI

PGP

urn:oasis:names:tc:SAML:1.0:am:PGP

Spki

urn:oasis:names:tc:SAML:1.0:am:SPKI

XmlDSig

urn:ietf:rfc:3075

未指定

urn:oasis:names:tc:SAML:1.0:am:unspecified