最近ちょっと勉強したので、簡単にまとめる。
SAML を使うには、まず、idP (id provider) と SP (service provider) との間で信頼関係を構築する必要がある。具体的には以下の作業を実施する。
- idP のメタデータファイルをダウンロードする。
- idP のメタデータファイルを SP に読み込ませる。
- SP のメタデータファイルをダウンロードする。
- SP のメタデータファイルを idP に読み込ませる。
これで、idP と SP との間で信頼関係が構築される。なお、idP のメタデータファイルの中には idP の (公開鍵) 証明書の情報が入っており、これは SP にて SAML response の署名チェックに使われる。また SP のメタデータファイルの中には SP の (公開鍵) 証明書が入っており、これは idP にて SAML request の署名チェックや SAML response の暗号化に使用される。
実際の SAML の通信の流れは以下の通り。(SP 起点の方式について書く)
- ユーザ (ブラウザ) が SP にアクセスする。
- SP は認証を idP に依頼する (SAML request)。この際、ユーザのブラウザを通じて idP へリダイレクトする。
- ユーザ~idP 間で認証を行う。
- 認証 OK なら、idP から SP に SAML response を返す。この際、ユーザのブラウザを通じて SP へリダイレクトする。
- ユーザは SP へのログインできる。
ポイントは、SP と idP は直接やり取りせず、ユーザにブラウザを通じてリダイレクトでやり取りしている点。これにより、SP~idP 間の通信のことは考えなくて良いところもメリットと理解している。