はじめに
この記事は認証についてチンプンカンプンのWEBプログラマー2年生が、
SAML認証について調べたことをなるべく易しくかみ砕いた言葉でまとめたものです。
- SAML認証って初めて聞いたんですけど一体何なんですか?
- SAML認証について調べようとしたら知らないカタカナばっかりでてきて意味わかんないむかつく
という方向けの記事です。
SAMLってなんなの?
SAMLってどういう意味?
SAMLはSecurity Assertion Markup Languageの略。
直訳すると、"安全な表明マークアップ言語"、となるのですが、このままでは意味不明ですね。
意訳すると、"ユーザの認証情報をXML形式で記述したもの"という意味になります。
SAMLは"OASIS"というコンピュータと通信に関する取り決めをする団体が策定しました。
現在の最新版となるSAML2.0は、2005年3月に発行されたものです。
Assertionってなんだ?
AssertionというのはSAML独自の概念になります。
これを直訳すると"表明"とか"主張"とかいう言葉になるのですが、その実際は受け渡しをする認証情報のことになります。
SAMLは何に使うの?
SAMLはおもにSSO(シングル・サイン・オン)の仕組みのひとつとして利用されています。
SSOとは、1組のIDとパスワードで認証を行うことで、複数のサービスにログインできる仕組みです。
SSOを利用することにより、ユーザはサービスごとにいちいち認証を行うという手間を省くことができる、というメリットがあります。
SAML認証のながれ
では、SAML認証はどのような流れで行われるのでしょうか?
最低限おぼえる用語2つ
SAMLを理解するために、次の2つの言葉を知っておいてください。
SP(Service Provider)
WEBサービスの提供側、認証情報を利用する側のこと。
この人アクセスしたがっているから認証してあげてね、とお願いする側です。Idp(Identity Provider)
認証情報を提供する側のこと。
この人ログインできたからサービス利用させて大丈夫だよ、ちなみにこんな情報持っている人だよ、と教えてあげる側です。
SAML認証には2種類のパターンがある
SAML認証には次の2つの認証の流れがあります。
1. SP-initiated SAML
2. IdP-initiated SAML
順番に確認していきます。
1. SP-initiated SAML のながれ
SP-initiated SAML、つまり、SPから流れがはじまるSAMLです。
認証は下記の順番で行われます。
- ユーザーがSPにアクセス
- SPは 認証要求< AuthnRequest > を作成し、ユーザーをIdPにリダイレクトする
- IdPは認証情報をユーザーにリクエスト
- ユーザーがログインする
- IdPは秘密鍵で電子署名した 認証応答< Response > を作る
- ユーザーは 認証応答< Response > をSPにPOSTする
- SPは 認証応答< Response > をIdpの公開鍵で検証する
- ユーザーはSPのWEBサイトにアクセスできる
認証要求とはその名の通り、ユーザを認証してくださいというメッセージです。
そして認証応答は、その要求に対するお返事です。
これらのメッセージがXML形式で記述されています。
2. IdP-initiated SAML のながれ
IdP-initiated SAMLは、IdPから流れがはじまるSAMLです。
認証は下記の順番で行われます。
- IdPは認証情報をユーザーにリクエスト
- ユーザーがログインする
- IdPは秘密鍵で電子署名した 認証応答< Response > を作る
- ユーザーは 認証応答< Response > をSPにPOSTする
- SPは 認証応答< Response > をIdpの公開鍵で検証する
- ユーザーはSPのWEBサイトにアクセスできる
いずれにしても、SAML認証ではSPとIdPの間で、信頼関係をつくっておく必要があります。
信頼関係とは、具体的には事前に公開鍵を交換し合うということです。
OpenIDとSAMLの違いから見るSAMLに向いているサービス
では、なぜSSOにSAML認証を使うのでしょうか。
SSOの仕様としてメジャーなOpenIDと対比してみます。
なお、ここではOpenIDとは何かについての詳細と認証の流れについては割愛します。
OpenIDとSAMLの違い1
OpenIDの場合
どんなサービスでも認証情報の提供側、認証情報の利用側になることができる。
SAMLの場合
事前の公開鍵の交換、デフォルト設定などを行う必要がある。
⇒ OpenIDとくらべてSAMLの方が連携するための敷居が高い。
OpenIDとSAMLの違い2
OpenIDの場合
連携するかどうかはユーザ自身で選択する。
SAMLの場合
連携するかどうかはユーザに同意確認しない。
⇒ SAMLではそもそも連携するかどうかユーザの選択権がない。
OpenIDとSAMLの違い3
OpenIDの場合
ログイン時に利用する認証情報の提供サービスをユーザ自身が選べる。
SAMLの場合
ログイン時に利用する認証情報の提供サービスをユーザで選ぶことはできない。
⇒ SAMLではユーザが実際にログイン情報を渡すサービスを選べない。
SAMLはどんなサービスに向いているのか
SAML認証には強制力があるため "すべてのユーザに利用させたい" 場合に向いているといえます。
そのため企業や団体など組織単位で利用するサービスに使われるケースが多いようです。
逆に、ユーザの自由度が求められる一般のサービスには向いていません。
まとめ
SAML認証について調べると、その難解さに萎えてしまったのですが、原因は用語の意味が分からないことでした。
実際の流れを知るには、別の何かに例えるよりも一つひとつの用語の意味を知ることのほうが理解の助けになると感じたため、なるべく易しい言葉でのまとめを作成しました。