SAMLとは
SAMLは「シングルサインオン」の実現方法の一つである。
シングルサインオンとは
シングルサインオンとは1度ログイン操作を行うと、連携している複数のサービスに自動でログインできる仕組みのこと。
以下に、複数の社内サービス、社外クラウドサービスを利用する企業の利用者の例を示す。
シングルサインオンを使う場合の利用者、システム管理者のメリットは以下の通り。
利用者のメリット
- 一か所に一度ログインすればそこと連携したサービスに自動的にログインできる。
- あちこちのサービスのユーザ名/パスワードを覚えずに済む。(よって、パスワードの使いまわしのリスクが下がる。)
システム管理者のメリット
- ユーザにどのサービスを使うことを許可するかを一か所で集中管理できる。
再び、SAMLとは
SAMLとは、wikipediaよると、
Security Assertion Markup Language (SAML、発音は SAM-el、/ˈsæməl/)は、特にアイデンティティプロバイダーとサービスプロバイダーの間で認証および認可データを交換するための公開標準である。
SAMLは、セキュリティアサーション (サービスプロバイダーがアクセス制御の決定を行うために使用するステートメント)のための XML ベースのマークアップ言語である。
とある。
(公開標準 : 使用に当たっての各種権利を伴って公然と利用可能な標準(wikipedia))
「アイデンティティプロバイダー」と「サービスプロバイダー」という言葉が出てきたが、前述の図に「アイデンティティプロバイダー(IDP)」と「サービスプロバイダー(SP)」を追記した図を以下に示す。
アイデンティティプロバイダー(IDP)は、ユーザーを認証するサービスである。
サービスプロバイダー(SP)は、IDPで認証したユーザが利用するサービスである。
SAMLの信頼関係構築
SAMLによるシングルサインオンは、ログイン操作を始める前にIDPとSPの間で「信頼関係」を構築する必要がある。
信頼関係を構築するために、IDPからSPへ、またSPからIDPへ「メタデータ」を渡す。(メタデータの詳細についてはここでは割愛)
IDPまたはSPのシステム管理者がメタデータの交換を行い、受け取ったメタデータをIDPまたはSPに設定する。
信頼関係を結ぶことによって、
- SAMLの通信(SAMLリクエスト/レスポンスの送受信)
- 認証結果に改竄がないことの確認
ができるようになる。
SAMLによるログイン
i)SAMLログイン開始、SAMLリクエスト送信
利用者はSP上の指定のURLにブラウザでアクセスすることによってSAMLログインを開始する。(1)
※ここではSPInitiatedログインのみを扱う。
利用者が1を操作するとそれをトリガーとして、SPがIDPに向けてHTTPで「SAMLリクエスト」を自動的に送信(リダイレクト)する。(2,3)
ii)SAML認証、ユーザ名とパスワードの入力
IDPはSAMLリクエストを受け取とったあと、利用者がIDPにログイン済みかどうかを確認する。
まだログインしていなければ、利用者のブラウザにログイン画面を表示し、ユーザ名、パスワードの入力を促す。(4)
利用者によるユーザ名、パスワードの入力が終わったら認証を行う。(5)
ログイン済みの場合は4,5は行わない。
iii)SAMLレスポンス送信、認証完了
認証が終わると、認証結果(アサーション)を含んだ「SAMLレスポンス」を作成し、X.509証明書を使ってアサーションまたはSAMLレスポンスに署名する。(6)
IDPはSAMLレスポンスをSPに向けてHTTPでSAMLレスポンスを送信(POSTまたはリダイレクト)する。(7,8)
SPはSAMLレスポンスを受け取ると、署名が正しいかどうか(改竄がないかどうか)を信頼関係構築時にIDPから受け取ったX.509証明書を使って確認する。(9)
以上で、SAML認証完了。
IDP/SPの例
IDPの例
- Microsoft Entra (旧AzureActiveDirectory : Microsoft365の認証基盤)
- Microsoft ActiveDirectory FederationService
- 学術認証フェデレーション
- google workspace
- octa
- trustlogin
- onelogin