この記事を読むとできるようになること
- SAMLとは何かについて理解できる
- SAMLを利用して何ができるのか、ユースケースを理解できる
- シングルサインオンとは何か、シングルサインオンのメリットについて理解できる
- フェデレーション方式でのシングルサインオンのフローと用語について理解できる
SAMLとは
- Security Assertion Markup Language(「サムル」)のこと
- SSO(シングルサインオン)などで利用される認証情報の規格
- XMLをベースとしたマークアップ言語を用いている
- OASISという国際的な非営利団体によって開発された認証情報の仕様
- 現時点で、SAML2.0が最新版
シングルサインオン
- あるサービスに一度だけログインすれば、以降はそのサービスと連携している全てのWebサービスを再ログインなしできる仕組み
- SAMLにより、特定のサーバで認証されたユーザー情報を、ほかのサーバと共有することでシングルサインオンを実現することが可能になる
シングルサインオンのメリット
- ユーザー体験の向上:ユーザーは一度だけログインすれば、複数の関連するアプリケーションやサービスにアクセスできるようになる。これにより、ユーザーは複数のユーザー名やパスワードを覚える必要がなくなり、ログインの手間が減る
- セキュリティの強化:認証情報は一元管理され、各アプリケーションはユーザーの認証情報を直接扱うことなく、ユーザーの身元を確認できるようになる。これにより、パスワードの漏洩リスクが減る
- 管理の効率化:ユーザーのアクセス権や認証情報は一元的に管理できるため、新たなユーザーの追加や既存ユーザーの権限変更、退職者のアクセス権削除などが容易になる
SAMLを使ったシングルサインオンを導入するメリット
アプリケーション間の統合:SAMLは業界標準のプロトコルであるため、異なるベンダーのアプリケーション間でもシングルサインオンを実現できる。これにより、異なるシステム間でのユーザーの移動がスムーズになる
主なシングルサインオン方式
シングルサインオンを実現する方式は、「フェデレーション方式」「エージェント方式」「リバースプロキシ方式」「代理認証方式」4種類ある。本記事では、フェデレーション方式を中心に紹介する
フェデレーション方式
- OpenID Connect(OAuthの拡張規格)やSAML(Security Assertion Markup Language)などのプロトコルを使用して、異なるドメイン間での認証情報の共有と認証が可能
- SAMLでは、SPとIDPの間では直接通信することはなく、全てブラウザを経由して処理が行われる
フェデレーション方式を実現するのに理解しておくべき概念
SPとIdP
Oktaなど認証情報を提供する側をIdentity Provider(IdP) 、Salesforceのように認証情報を利用する側をService Provider(SP)と呼ぶ
SP-IdP間の信頼関係
- 事前にSPとIdPの間でPKIにより信頼関係を構築している必要がある
- SSOを実装するSPを開発している場合、SP側に何かしらの形でIdPの情報を登録できるようにし、IdP側に登録するSPの情報を取得(出力)できるようにしておく必要がある
2種類のフロー
IdP主導(IdP Initiated SSO) とSP主導(SP Initiated SSO)があり、これらは併用可能
IdP主導のSSO
ユーザーはまずIdPにログインし、その後、IdPから認証応答(ユーザーの認証情報と属性を含むXML文書)を受け取り、それをSPに送信する。SPはこの認証応答を検証し、成功したらユーザーを認証する
SP主導のSSO
ユーザーはまずSPにアクセスし、SPはユーザーをIdPにリダイレクトする。ユーザーはIdPで認証し、認証応答を受け取り、それをSPに送信する。SPはこの認証応答を検証し、成功したらユーザーを認証する
シングルサインオンURL(Assertion Consumer Service URL)
IdPからの認証応答がSPに送信されるURL
オーディエンス URI (SP エンティティ ID)
SPを一意に特定するための識別子。(ドメイン名を含むURLとする慣習がある)。また、IdP側にもIdPを一位に特定するためのエンティティIDが存在する
RelayState
- SAMLプロトコルの一部
- このパラメータはユーザーが最初にアクセスしようとしたURLを指す
- これをもとに、ユーザーが認証プロセスを完了した後、元のページにリダイレクトするということが実現可能になる
シーケンス
SPがシングルページアプリケーションであると仮定する
SP主導(SP Initiated SSO)
- ユーザーがブラウザからSPのフロントエンドにアクセスする
- シングルサインオンが有効になっている場合、ユーザーがログインしようとすると、SPのバックエンドが認証要求メッセージを生成し、ブラウザ経由でIDPにリダイレクトしつつ送信する
- IDP側で認証要求メッセージを元に認証する
- 認証応答メッセージを作成しブラウザ経由でSPにPOSTで送信
- SPのバックエンドにて認証応答メッセージを検証する
- 検証に成功したらユーザーをSP上でも認証済みとし、トップページに遷移させる
IDP主導(IDP Initiated SSO)
SP主導の場合と大きくは変わらないが、SPがSAML RequestをIdPに送るフローがない
まとめ
いかがでしたでしょうか。本記事では、SAMLとシングルサインオンの概要、メリット、フェデレーション方式でのシングルサインオンのフローと用語について紹介しました。次回のパートでは、SPとIdPでやり取りされるメッセージの具体的な内容について紹介したいと思います。