-
Notifications
You must be signed in to change notification settings - Fork 0
MS_WIF
- TOP > インフラストラクチャ > 認証基盤 > クレームベース認証 > WS-Federation
WIF: Windows Identity Foundation
- Windows Identity Foundation (WIF) は、クレームベース認証に
対応のアプリケーションを構築するためのフレームワークである。 - このフレームワークは、WS-Trust プロトコルと WS-Federation プロトコルを
抽象化し、セキュリティ トークン サービスと要求に対応したアプリケーションを
構築するための API を開発者に提供する。 - アプリケーションでは、WIF を使用して、STS から発行されたトークンを処理し、
RP(Web アプリケーションまたは Web サービス)でクレームベースの決定を下すことができる。
※ .NET Core(MS_DotNetCore.md)では
「Microsoft.AspNetCore.Authentication.WsFederation」を使用するもよう。
補足(最新化): WIF の位置付けは、その後 3 段階で変わった。
世代 実体 WIF 1.0 別途インストールする追加コンポーネント( Microsoft.IdentityModel.*)WIF 4.5 .NET Framework 4.5 に統合( System.IdentityModel.*).NET Core 以降 移植されていない。認証ミドルウェアに置き換え したがって本ページの手順(FedUtil、SDK のインストール)は .NET Framework 時代のものである。 ASP.NET Core では、NuGet で
Microsoft.AspNetCore.Authentication.WsFederationを追加し、Program.csで設定する。builder.Services.AddAuthentication(sharedOptions => { sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme; }) .AddWsFederation(options => { options.MetadataAddress = "https://adfs.example.com/federationmetadata/2007-06/federationmetadata.xml"; options.Wtrealm = "https://app.example.com/"; }) .AddCookie();なお、トークン処理のライブラリ自体は
Microsoft.IdentityModel.Tokens(IdentityModel 拡張) として .NET Core 以降も提供が続いており、 JWT の検証などはこちらが担っている。
サポートあり。アサーションは SAMLや JWTを選択可能。
SAML Assertion は WIF で処理することが可能だが、 JWT については NuGet で配布されている 「JSON Web Token Handler For the Microsoft .Net Framework 4.5」を 使用することで処理可能だ。 — .NETで使えるアイデンティティ連携のためのライブラリまとめ(後編) - Build Insider
Extension でサポートしているようだが、更新が CTP で止まっているらしい。
WIF does not support SAML-P, although some time ago an extension to WIF that adds SAML 2.0 support was CTP'ed but has not took off since then. — Understanding Windows Identity Foundation (WIF) 4.5 - CodeProject
That's because
Saml2Assertionrefers to the token not the protocol. The SAML token used in WIF is a 1.0 token. There is no SAML 2 protocol support in .NET. — Working with SAML 2.0 in C# .NET 4.5 - Stack Overflow
※ WIF とか ADAL がちゃんと SAML を喋れればいいんですが、 ws-federation / OpenID Connect なんで実は SAML SP ってぽっかり穴が空いています。 — IdM実験室
補足(重要): ここは今も変わっていない。 .NET には SAML 2.0 の「プロトコル」の公式実装が無い。
- SAML トークン(アサーション)の読み書き — 標準ライブラリで可能
- SAML 2.0 プロトコル(SP としての AuthnRequest / Response 処理) — 公式実装なし
SAML の SP を .NET で実装する場合は、 Sustainsys.Saml2(OSS)や ITfoxtec Identity SAML 2.0 といった サードパーティ ライブラリを使うのが現実解である。 あるいは、ADFS や Microsoft Entra ID を SAML ⇔ OIDC の変換役として前段に置き、 アプリ側は OpenID Connect だけを話す構成にする。
RP と STS との間で信頼を簡単に確立できる。
移行メモ: 以下は .NET Framework + Windows Identity Foundation SDK 4.0 時代の 手順である。現在は SDK の配布も終了しており、 ASP.NET Core では前述のミドルウェア設定に置き換わっている。 既存システムの保守時の参照用として残す。
- STS(ADFS)側の構築を完了させておく。
- STS のエンドポイントの FQDN とサーバ証明書の CN(Common Name)は一致させておく。
RP で以下の前提ソフトウェアをインストールする。
- IIS(
MS_IIS.md) - ASP.NET 3.5 and ASP.NET 4.5
- .NET Framework 3.5 Features and Windows Identity Foundation 3.5 options
STS 側の認証連携を行う HTTPS のエンドポイントの証明書が
自己署名証明書の場合、RP から以下の手順を実施して検証できる。
- フェデレーション・メタデータを交換する STS の HTTPS エンドポイントにアクセスする。
- 証明書のエラーが表示されるのでこれをクリックする。
- [証明書は信頼できません]ダイアログ・ボックスで[証明書の表示]を押下。
- [証明書のインストール]ボタンを押下して以下のストアに証明書をインストールする。
- ストア: [ローカル コンピューター]の[信頼されたルート証明機関]
補足: この操作は管理特権を要する。 ローカルマシンの証明書ストアの更新処理 を参照。
なお、開発の都合で自己署名証明書を信頼させる運用は本番に持ち込まないこと。 「信頼されたルート証明機関」への追加は、 そのマシンで任意のサーバ証明書を偽装できるようにする操作である。
FedUtil.exe を実行し、ウィザードで設定する
(C:\Program Files (x86)\Windows Identity Foundation SDK\v4.0)。
| 画面 | 設定内容 |
|---|---|
| Welcome | Web.config のパスと、アプリケーションの URI(仮想ディレクトリ) |
| Security Token Service | [Use an existing STS]+ https://[ADFSのFQDN]/federationmetadata/2007-06/federationmetadata.xml
|
| STS signing certificate chain validation error | 自己署名なら[Disable certificate chain validation]、正規 CA なら[Enable〜] |
| Security token encryption | 暗号化の要否と証明書の選択 |
| Offered claims | ADFS (STS) から提供されるクレームの一覧が表示される |
| Summary | 内容を確認して Finish |
Web アプリケーション・プロジェクトを右クリックし、
[Add STS reference]を選択でも FedUtil.exe を実行可能。
-
Web.config(MS_DotNetConfig.md)とFederationMetadata.xmlが作成(or 更新)される。-
Web.config—claimTypeRequired要素で、要求するクレームの種類を変更できる。 -
FederationMetadata.xml—/uオプションでWeb.configの内容から更新する。%FEDUTILPATH%\FedUtil.exe /u Web.config
-
-
Trust management に下記の日時更新タスクが登録される。
- Schedule a task to perform daily WS-Federation metadata updates
補足: この「メタデータを定期取得するタスク」は重要である。 STS のトークン署名証明書は定期的にロールオーバーするため、 メタデータを取り込まないと証明書更新のタイミングで一斉に認証が失敗する。 ASP.NET Core の
WsFederation/OpenIdConnectミドルウェアはMetadataAddressから自動的に再取得するので、 この問題は起きにくくなっている。
- WS-Federation
- クレームベース認証
- フェデレーション サービス (AD FS)
- STS系ミドルウェア
- Windows Identity Foundation の概要 - Microsoft Learn
- Open棟梁 のサンプル(
ClaimsWeb_sample)
Tags: 認証基盤, クレームベース認証, .NET開発, ASP.NET
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。