SAMLとは
Web アプリのシングルサインオン (SSO) を実現する XML ベースでやり取りを行うことで、異なるインターネットドメイン間でユーザー認証を行うための認証情報の規格です。
要するに、シングルサインオン (SSO) を実現するための手段の1つです。
正式名は"Security Assertion Markup Language"です。
シングルサインオン (SSO) とは
一度のログインで、利用したいサービス全てにログインできる仕組みのことです。
例えば、業務に利用するサービスの数が増加すると、当然ユーザーにとっては各サービスにログインするためのパスワード管理が煩雑になってしまいます。
その結果、推測されやすい危険なパスワードを設定してしまう人も出てきます。
この解消に役立つのがシングルサインオン (SSO) です。
シングルサインオン (SSO) は認証を行えば、認証サーバーが認証情報をサービスと連携してくれるため、ユーザーは一度のログインで他のサービスを利用できるようになります。
繰り返しとなりすが、SAML は SSO を実現するための手段の1つである ということです。
※他の仕組みについて
ここでは触れませんが、SSO の実現するためのには 5つ の方式があり SAML がその中でも有力な選択肢となっています。
・代行認証方式
・リバースプロキシ方式
・エージェント方式
・フェデレーション方式....SAML,OpenID Connect
・Kerberos認証
セキュリティ用語について
具体的にSAMLの話をする前に今回の絡む一般的なセキュリティ用語を説明します。
・認証...ユーザーの本人確認を行うこと。本人であることの証明をすること。
・認可...情報やシステムなどのリソースにアクセスする権限を付与する。認証後にそのサービスでできる権限を与えること。
SAML 用語
認証フローの説明
以下が大まかなフローです。
1.ユーザーが SP (サービス)へアクセスするために IdP(認証プロバイダー) にて認証を実施します。
2.認証が成功すると IdP から Assersion(トークン) が発行されます。
3.SP (サービス)は Assersion (トークン) を連携してもらうことで、そのユーザーが正当であるとみなして、サービスを展開します。
またもう一つ重要なポイントとして、SAML とはあくまでやり取りのことである ということです。
つまり、SAML を利用する際の認証方法については関与しないことには注意が必要です。
実際のフロー
SAML 認証には2種類のフローがありますが、起点の違いだけです。
(1).SP-initiated SSO → SP が起点
(2).IdP-initiated SSO → IDP が起点
-
ユーザーが SP (例.Webサービス) にアクセスします。
-
SP はユーザーの要求が未認証であることを検知し、SAML AuthRequest (認証要求)を作成します。
(SAML AuthRequest には、リクエスト識別子、SAMLバージョン、要求する属性やサービスのエンドポイントなどの情報が含まれる) -
SP はユーザーを選択した IdP にリダイレクトします。このリダイレクトには、SAML AuthRequest (認証要求)も含まれます。
-
ユーザーは IdP の認証ページにリダイレクトされ、ユーザー名とパスワードなどの認証情報を提供して認証を行います。
IdP はユーザーのアイデンティティを確認し、SAML Response(応答)を生成します。
(ユーザーの認証ステートメントや属性情報が含まれる) -
この SAML Response(応答)は、SP が提供されたエンドポイントに送信されます。
-
SP は SAML Response(応答)を受信し、署名の検証を行います。
応答が正当である場合、ユーザーは認証されたとみなされ、SP のサービスにアクセス権が与えられます。
-
ユーザーが特定のアプリケーションやサービスに直接アクセスする代わりに、最初に IdP にアクセスして、認証情報を提供して認証を行います。
-
IdP はユーザーの認証情報を確認し、SAML Response(応答)を生成します。そしてユーザーがアクセスしようとしていたSPに連携します。
-
SAML Response(応答)を受け取った SP は、ユーザーのアイデンティティと属性情報を検証します。ユーザーが認証されると、SP のサービスにアクセスできるようになります。
以上、SAML の基本についての記載でした。
この記事に関して間違いなどありましたら、ご指摘いただけるとうれしいです。