Web
ActiveDirectory
SAML
SSO

SAML2.0ベースのSSOをわかりやすく解説してみる

はじめに

今やさまざまなSaaSでSSO(SAML2.0)できるようになってきました。しかし、SAMLは仕様が複雑でなかなか理解しにくいものです。そこで、できるかぎりわかりやすく解説して行きたいと思います。
なお、本稿では、SP-initiated SAMLをベースに解説します。

SAML2.0ベースでのSSO

用語

  • Idp(Identity Provider):認証情報を提供する側。シングルサイン元
  • SP(Service Provider):認証情報の利用側。シングルサイン先
  • AuthnRequest:認証要求。SP側がIdpへ認証を要求する際に発行される要求
  • SAMLResponse:認証応答(認証情報含む)。認証要求に対する認証情報を含んだ応答

事前

  • 事前にIdpとSPは信頼関係を結ぶ(公開鍵を交換し合う)
  • IdpとSPにそれぞれ対になるアカウントが登録されている(なければ作成するというのもあるが、ここでは既に登録されていることとする)

処理

saml1.png

  1. ユーザーはSPに対しアクセスする
  2. ユーザーはSP未認証のため、SPはIdpにAuthnRequestを送信する(リダイレクト)
  3. Idpはユーザーの認証状況を確認する。ここでは、既に認証済み(ログイン済み)とする
  4. Idpはユーザーの認証情報をSAMLResponse(Idpの秘密鍵で署名する)としてSPに送信する(リダイレクト)
  5. SPはSAMLResponseをIdpの公開鍵で検証する
  6. SPはSAMLResponseに含まれる認証情報を基にSP側の紐づくアカウントで認証したことにする
  7. SPにアクセスが許可され、利用する

難しすぎます。。。

例えで理解する

旅行者が日本から米国に観光に行くことに例えて説明する
ユーザー=旅行者
Idp=日本国
SP=米国

事前

  • 日本国と米国は条約を締結して旅行者の入国を認める
    • =IdpとSPが公開鍵を交換して信頼関係を結ぶ
  • 日本人の旅行者(住民)は米国のestaに事前に登録しておく
    • =IdpとSPに対になるアカウントが登録されている

入国手続き(処理)

saml2.png

  1. 旅行者は渡米する
  2. 米国の入国管理官は、パスポートを出すように要求する
    • =AuthnRequest
  3. 旅行者は日本国のパスポートは発行済み
    • =Idpにログイン済み
  4. 米国の入国管理官にパスポートを差し出す
    • =SAMLResponseを送信する
  5. 入国管理官はパスポートをチェックする(ICチップ等)
    • =SAMLResponseの署名を検証
  6. パスポートの情報とestaの申請を照らし合わせる
    • =SP側の紐づくアカウントで認証したことにする
  7. 入国を許可される
    • SPにアクセスが許可される

どうでしょうか?なんとなくイメージできましたか?若干パスポートを発行するあたりの時系列がSAMLと異なりますが、だいたい合っているので許してください。

終わりに

SAMLにはいろいろなパターンがあり、すべてを理解するのは難しいかもしれません。しかし、最も基本的なパターンについて理解できたのではないでしょうか。これでSAMLでのSSOは、もう怖くありませんね。Let' SSO!!