SAML認証は、IdPで済ませた認証の結果を、ログイン先のサービスが受け取る形で、ブラウザ経由のシングルサインオンを実現する仕組みです。仕事で使うSaaSや社内のサービスが増えた今、ログインの手間を減らすだけでなく、認証のやり方をそろえたり、権限の管理をまとめたりするうえでも使われています。
ただし、SAMLを「SSOができる規格」くらいの理解で入れると、属性の渡し方、証明書を更新する作業、ログアウトの動きの差といった点でつまずきやすくなります。この記事では、SAMLの意味、仕組み、メリット、気をつけたい点を順に見ます。あわせて、OAuthやOpenID Connectとの違い、よくある使い方、入れる前に見ておきたい点も説明します。
SAMLは、別のドメインの間で、ユーザーが認証済みであることや、ユーザーにひもづく属性を受け渡すための標準です。やり取りの中心になるのは XML で表したアサーションで、そこに「この人は IdP で認証済みである」「どのメールアドレスや所属を持つか」といった情報を載せます。
企業で多い使い方は、社内の認証を起点にして、複数の SaaS へ入る形です。このとき、ログイン先のサービスは、原則としてユーザーのパスワードそのものを受け取りません。IdP が出した認証の結果を受け取り、それを確かめたうえでログインを通します。
シングルサインオンは、一度のログインで複数のサービスへ入れるようにする考え方です。これがないと、SaaS や社内のサービスごとにログインが必要になり、パスワードの使い回しや、退職した人のアカウントが残るといった事故も起きやすくなります。認証を一か所に集めると、多要素の認証や場所・端末の条件もそろえやすくなります。
シングルサインオンについて詳しく知りたい方は、こちらもご覧ください。
SAMLは、企業の認証を起点にして外部の SaaS へ入る用途と相性がよく、多くの企業向けサービスで広く使われています。すでに IdP を中心にした運用がある環境では、相手のサービスも SAML に対応していれば広げやすい方式です。
OAuth 2.0 と SAML は、そもそもの役目が違います。OAuth 2.0 は、第三者のアプリに限られたアクセス権を渡すための認可の枠組みです。一方の SAML は、認証の結果と属性を相手へ渡してログインを成立させる場面でよく使われます。
たとえば、写真アプリがクラウドストレージの写真を読みたいとき、ユーザーのパスワードを渡す代わりに「写真だけ見てよい」という権限を渡すのが OAuth 2.0 の典型です。これに対し、仕事のログインで「この人は誰か」をログイン先へ伝えたいときは、SAML のほうが話が合います。
OAuth 2.0 にもログイン画面が出てくるため、これだけで認証の方式だと受け取られがちです。ただ、OAuth 2.0 そのものは認可の仕様であり、標準の形でユーザー認証を定めたものではありません。ログインに使うなら、認証のための情報を足した OpenID Connect のような方式を使うのが一般的です。
OpenID Connect は OAuth 2.0 の上に認証の仕組みを足した方式です。ログインしたユーザーが誰かを ID トークンで伝え、このトークンは一般に JWT で表されます。SAML は XML のアサーションを使うため、使うデータ形式も発想も少し違います。
企業では、SaaS は SAML、社内で作ったアプリは OpenID Connect というように分けて使うことも珍しくありません。大事なのは、どの方式を選ぶかだけでなく、認証の強さとアカウント運用をそろえられるかです。
SAML認証では、利用者、SP、IdP の三者がやり取りします。通常のログインと違い、IdP が認証を受け持ち、SP はその結果を受け取って確かめます。
SAML の手順は、どちらから始まるかで二つに分けて説明されることが多いです。
普段の URL からそのまま入る使い方なら、SP から始まる手順が合いやすいことが多いです。一方、社内ポータルのように IdP 側からサービスを選ぶ導線なら、IdP から始まる手順も使われます。どちらがよいかは、相手のサービスがどちらを前提にしているか、ログの取り方をどうしたいかで決めます。
SAMLResponse には、認証が通ったかどうか、NameID、属性、有効な期間などが入ります。SP は、それが想定した IdP から出たものか、自分向けのものか、まだ有効か、といった点を見ます。
ここが甘いと、受け入れるべきでない応答まで通してしまうおそれがあります。入れる前に、相手のサービスが何を見ているかを確かめておくと安全です。
SAML メッセージを運ぶ方法としては、HTTP-Redirect や HTTP-POST などがあります。Web ブラウザを使う SSO では、要求を Redirect で送り、応答を POST で受ける形がよく見られます。
SSO は規格だけ見れば済むわけではありません。実際にはブラウザや社内ネットワークの条件でも動きが変わるため、使う端末とブラウザで事前に試すことが大切です。
SAML では、SAMLResponse やアサーションに署名を付け、それを受け手が確かめる形が一般的です。必要に応じて暗号化も使われますが、暗号化だけで十分というわけではなく、署名を見て正しい相手から届いたものかを確かめることが欠かせません。
SAML で使う証明書には有効な期間があります。期限切れや更新もれが起きると、SSO が止まるおそれがあります。しかも、IdP 側だけ差し替えれば終わりとは限らず、SP 側でメタデータを入れ替える作業や、新旧の証明書をしばらく併用する段取りが要ることもあります。
SAML では IdP が認証を受け持つため、SP が SAML に対応していれば、SSO を広げやすくなります。ただし、ログインを通す仕組みと、アカウントを作る・止める仕組みは別で考える必要があります。
SAML でよく出るフェデレーションとは、別のドメインの間で、認証の状態や属性を受け渡す考え方です。やり取りするのは ID とパスワードそのものではなく、認証結果と属性を入れたアサーションです。
シングルログアウトは、IdP または SP でログアウトしたときに、関連するセッションも終わらせるための仕組みです。ただし、すべてのサービスが同じように対応しているわけではなく、動きに差が出ることがあります。共有の端末が多い環境では、セッションの切れ時間や端末ロックもあわせて考える必要があります。
SAML はログインの成否を受け渡す仕組みであり、ユーザーの作成・変更・削除を自動で行う標準ではありません。退職や異動のときに SaaS 側のアカウントを確実に止めたいなら、SCIM などの仕組みや、初回ログイン時に作る方式もあわせて考えると管理しやすくなります。
複数のサービスで何度もログインしなくてよくなるため、日々の作業が楽になります。SaaS の数が多い環境ほど、差が出やすい点です。
認証を IdP に集めることで、多要素の認証やアクセス条件を一貫してかけやすくなります。サービスごとの認証のばらつきが出にくくなるのは大きな利点です。
IdP 側で属性やグループを持たせると、どのサービスへ入れてよいかをそろえやすくなります。異動や組織が変わるときでも、サービスごとの個別に対処を減らしやすくなります。
認証を IdP に集めるため、IdP が止まったり侵害されたりしたときの影響は大きくなります。管理者の多要素の認証、権限の絞り込み、監査ログ、予備系、障害時の手順を先に決めておく必要があります。
SAML では、メタデータ、証明書、ACS、NameID、属性、署名の要否など、決めることが多くなりがちです。相手のサービスごとに必要な値が違うこともあり、入れるまでに手間がかかることがあります。
証明書の期限が切れると SSO が止まるおそれがあります。更新の予定、周知、試験、切り戻しまで含めて、年ごとの作業として回せる形にしておくことが大切です。
SAML は標準ですが、SP ごとに受け入れる条件や厳しさが違うことがあります。署名を見るか、Audience や Recipient をどこまで見るか、必須の属性は何かを、事前の試験で確かめておく必要があります。
グループウェア、勤怠、経費、CRM、文書を管理など、日々の仕事で使うサービスが増えるほど、SSO の価値は高まります。クラウドの利用が増えた会社では、SAML を使って認証をまとめる例が多く見られます。
社内の IdP で認証し、各 SaaS へ入る形が代表例です。サービスごとに ID とパスワードが散らばる状態を避けやすくなり、退職者の残りや権限のつけすぎも抑えやすくなります。
最初に、どのサービスと利用者を対象にするかを決めます。主要な SaaS だけ先にまとめるのか、社内ポータルまで含めるのかで、必要な作りは変わります。
SSO は便利ですが、IdP を突破されると影響が大きくなります。多要素の認証に加え、端末や場所の条件も含めて、どこまでかけるかを先に決めておく必要があります。
どの属性を相手へ渡し、どの値でアクセスを分けるかを先に決めておくと、あとで運用が崩れにくくなります。最初は必要なものだけに絞るほうが無理が出にくいです。
SSO だけでは、使わなくなったアカウントの整理までは自動になりません。退職、休職、委託先の切り替えといった場面も含め、SaaS 側のアカウントをどう止めるかまで決めておく必要があります。
証明書の更新は、忘れると大きな事故につながります。担当者が変わっても迷わないよう、更新の手順を文書にし、試験のやり方も残しておくことが重要です。
製品やサービスを選ぶときは、機能の多さだけでなく、ログの見やすさ、管理者の保護、障害時の切り分けのしやすさまで見ておくと、入れたあとで困りにくくなります。
SAML認証は、別のドメインの間で認証結果と属性を受け渡し、シングルサインオンを実現するための代表的な方式です。基本は、利用者、SP、IdP の三者でやり取りし、IdP が認証を受け持ち、SP がその結果を確かめてログインを通す、という形です。
入れるときは、便利さだけでなく、IdP の守り、属性の渡し方、証明書を更新する作業、アカウント運用まで含めて考える必要があります。相手の対応している方式と自社の運用に合う形を選ぶことが大切です。
SAML認証は、別のドメインの間で認証結果とユーザー属性を受け渡すための標準です。IdP が出したアサーションを SP が確かめ、ログインを通します。
IdP はユーザーを認証して結果を出す側、SP はその結果を受け取り、ログイン先として受け入れる側です。
企業の認証を起点に複数の SaaS へ入る形と相性がよく、多くの企業向けサービスが対応しているためです。
OAuth 2.0 は主に認可、SAML は認証の結果と属性の受け渡しに向く方式です。
相手の対応している方式で決まることが多いですが、SaaS の SSO では SAML、Web アプリや API を中心に作る場面では OpenID Connect が使われやすいです。
SP から始まる手順はログイン先の URL から入る形、IdP から始まる手順はポータル側でサービスを選ぶ形です。
期限切れや更新もれが起きると SSO が止まるおそれがあるためです。更新の手順を平時から決めておく必要があります。
ログインの手間を減らしやすく、認証のやり方やアクセス条件もそろえやすくなります。
IdP への依存が強くなること、連携の設定が細かいこと、証明書の更新を忘れられないことです。
対象にするサービスと利用者、認証の強さ、渡す属性、アカウント運用のやり方から決めるのが基本です。