Skip to content
nishi_74322014 edited this page Aug 4, 2026 · 1 revision

WIF

概要

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 の検証などはこちらが担っている。

Protocol

WS-FED

サポートあり。アサーションは SAMLJWTを選択可能。

SAML Assertion は WIF で処理することが可能だが、 JWT については NuGet で配布されている 「JSON Web Token Handler For the Microsoft .Net Framework 4.5」を 使用することで処理可能だ。 — .NETで使えるアイデンティティ連携のためのライブラリまとめ(後編) - Build Insider

SAML

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 Saml2Assertion refers 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 だけを話す構成にする。

FedUtil

RP と STS との間で信頼を簡単に確立できる。

移行メモ: 以下は .NET Framework + Windows Identity Foundation SDK 4.0 時代の 手順である。現在は SDK の配布も終了しており、 ASP.NET Core では前述のミドルウェア設定に置き換わっている。 既存システムの保守時の参照用として残す。

準備

STS側の構築

  • 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側のエンドポイントの証明書を検証

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.configMS_DotNetConfig.md)と FederationMetadata.xml が作成(or 更新)される。

    • Web.configclaimTypeRequired 要素で、要求するクレームの種類を変更できる。

    • 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 から自動的に再取得するので、 この問題は起きにくくなっている。

参考


Tags: 認証基盤, クレームベース認証, .NET開発, ASP.NET

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally