Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした