SAML2.0準拠のSSOを実装する事になったけど何をどうすればいいのか
あまりにも分からないので調査。
分からなすぎるのでアウトプットで一旦まとめてみる。
※※分からない人が分からない事を書いている、ただのメモ※※
そもそもSSOとは?
SSO=「シングルサインオン」
一度認証を通れば、その認証情報を使って、許可されているすべてのサービスを使える仕組みのこと。
シングルサインオンを実現する仕組みは4種類あり、
その内の1つが認証連携(フェデレーション)方式。
フェデレーション方式とは、クラウドサービス間を、パスワードの代わりにチケットと呼ばれる情報を受け渡しすることで、シングルサインオンを実現する方法。
フェデレーション方式に使えるプロトコル・標準規格の1つが「SAML」らしい。
プロトコルって何…?
コトバンクによると「コンピューターネットワークで通信を行うための手順や約束事。 伝送路、伝達方法、通信相手の特定、データの構成や表現方法などをあらかじめ規定したもの」だそうです。
SAMLとは
Security Assertion Markup Language(セキュリティ・アサーション・マークアップ・ランゲージ)の略。
前述の通りで考えると、SSOをフェデレーション方式で実装する時のお約束事のことらしい。
以下、さらに詳しく調査。参考URLの記述を列記してみる。
- 認証情報を受け渡しするときに使うことを目的として作られたXML形式の書式(と、あれやこれやの決まり事)
- そもそもの出発点は「やり取りする認証情報は、どんな書式にしましょうね?」→「よし!XML形式をベースにして、こんな感じにしようぜ」
- SAMLとは異なるインターネットドメイン間でユーザー認証を行うための標準規格
- IdP(Identity Provider)とSP(Service Provider)の2つの要素で構成される
- Webサービスを提供するSP側がSAMLに対応していれば、IdPが提供する認証情報を利用しSSOを実現できる
- 「AuthXML(AuthenticationXML)」と「S2ML(Security Services Markup Language)」という2つのセキュリティ標準を基にできている
なんかまたよく分からないのが出てきた……調べてみたら、
同様の技術として既に存在していた、Securant Technologies社のAuthXMLと、Netegrity社のS2MLという2つの規格を統合したものがSAMLだそうで。なるほど。
結局SAML2.0準拠って何すればいいの?
以下、2つの記事からシーケンス図を見比べてまとめてみる。
図は無いがこの記事も参考にしてみる→やさしい言葉で理解するSAML認証のまとめ
- ユーザーはSPに対しアクセスする
- ユーザーはSP未認証のため、SPはIdpにAuthnRequestを送信する(リダイレクト)
- Idpはユーザーの認証状況を確認する。ここでは、既に認証済み(ログイン済み)とする
- Idpはユーザーの認証情報をSAMLResponse(Idpの秘密鍵で署名する)としてSPに送信する(リダイレクト)
- SPはSAMLResponseをIdpの公開鍵で検証する
- SPはSAMLResponseに含まれる認証情報を基にSP側の紐づくアカウントで認証したことにする
- SPにアクセスが許可され、利用する
- IdP(Identity Provider)=認証情報を提供する側。認証情報を提供するシステム。
-
SP(Service Provider)=認証情報を利用する側。WEBサービスの提供側。クラウドサービス。
クラウドサービスってことはAPIサーバーに使うAWSとかはこっちになる?のか?わからん。
→なんか自分がすごく見当違いな事を言っている事だけは分かった。
どうやらSAML認証には、SPから流れが始まるSP-initiated SAMLと、Idpから流れが始まるIdP-initiated SAMの2種類があるらしい。
上記シーケンス図はどちらもSPから始まっているように見受けられるので、SP-initiated SAMLっぽい。