LoginSignup
99
76

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-02-01

はじめに

今やさまざまな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!!

99
76
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
99
76