ブログ

SSOの実現に必要な「SAML」とは?

SSOの実現に必要な「SAML」とは?

SAMLをひとことでいうと

SAML(読み方:サムルまたはサムエル)は、システム間で認証情報を交換するための規格で、一つのシステムにログインすることで、すべてのシステムを使えるようにするシングル・サインオン(SSO)を実現するのに重要な技術です。SAMLはSecurity Assertion Markup Languageの略で、eビジネスの業界団体であるOASISが規格化しています。

SAML登場の背景

SAMLが登場するまで、認証はそれぞれのシステムに組み込まれているのが一般的でした(図1)。システムや認証が複雑・巨大化するにつれ、認証を切り離して複数システムで共通化したいというニーズが生まれました。そうすることで、システムの更改に合わせて認証の仕組みを調整したり、組み込みなおす必要がなくなります。また、認証を共通化することで、1回のログインで異なる複数のシステムを利用するようにもできるわけです。
このような動きがでてきた当初、認証システムとそれを利用するシステムの間のやり取りの方法は、開発者ごとに独自のものでしたが、共通化すればより広い範囲で認証システムが使えるようになります。そこで2002年に規格化されたのがSAMLの最初のバージョンであるSAML v1.0です。2020年時点での最新版は2005年に制定されたSAML v2.0です。最近では企業の情報システム(エンタープライズ・システム)でも、SSOの実現技術として広く使われるようになってきました。

SAML_図1_s.png

SAMLの考え方

SAMLは、簡明なテキスト形式のデータによってシステム間の認証情報のやり取りを実現します。SAMLはSecurity Assertion Markup Languageという正式名称からわかるように、XML(Extensible Markup Language)形式で記述します。ただしSAMLは言語仕様にとどまりません。異なるシステム間で認証情報をやり取りするには、その際のお互いの役割を明確にし、やり取りの手順も明確化する必要があるからです。
SAMLでは通信プロトコルにWebアクセスを始めとして広く使われるHTTPを用います。(規格上はHTTP以外でも通信可能ですが、実際にはHTTPに限られています)。さらにSAMLでは認証情報を発行する主体(エンティティ)をアイデンティティ・プロバイダ(IdP:Identity Provider)、認証情報を受け取ってユーザーにサービスを提供する主体をサービス・プロバイダと呼びます。この2者にユーザーを加えたやり取りを定義することでシングル・サインオン(SSO)などの認証の統合を実現します。

SAMLによるSSOの認証手順

企業(エンタープライズ)システムでシングル・サインオン(SSO)を実現する場合の情報のやり取りを見てみましょう(図2)。ユーザーがサーバー(サービス・プロバイダ)にアクセスする(図2①)と、サーバーはアクセスをリダイレクトして、ユーザーがIdPによる認証を受けることを求めます(図2②)。このときサーバーはリダイレクト先を示すURLにSAMLを要求する情報を埋め込みます。ユーザーがIdPによる認証を受けると、SAMLアサーションの形式でHTML本体(ボディ)に書かれた認証情報がIdPからユーザー経由でサーバーに送られます(図2③)。サーバーはSAMLアサーションの内容が正当なのものだと検証したうえでユーザーにアクセスを許可するわけです(図2④)。

SAML_図2_s.png

SAMLを使ったSSOの導入

SAMLは最新バージョンの登場から15年という歴史のある規格ですが、企業が実際にSAMLを使ってSSOを実現しようとすると、問題が生じることも少なくありません。SAMLは認証情報の交換を規定していますが、権限の分け方や付け方、アクセスできる情報まで規定しているわけではありません。また企業で使われるシステムはSAMLに対応していないことも珍しくありません。このような場合は独自の認証方式にSAMLインタフェースを持たせるケースが多いですが、その結果、機能が制限されるなど使い勝手に不便が生じることもあります。

SAMLに限らず、SSOを導入するには技術とノウハウを備えたインテグレータを活用することが重要です。かもめエンジニアリングは豊富な実績とノウハウで企業のSSO導入をお手伝いしています。

>> SAML対応していない社内システムなどを改修なしでSAML認証可能とする、フェデレーション対応ツール「Keygateway」をご案内しています。