つぎに、アサーションがどうやってサイト間で引き渡されるのか、GSSOの基本フローについてご説明します。
ここでは、アーティファクトを使う方式(Browser/Artifact profile)で説明します。
これだけは覚えておきたいSAML用語 - 2 -
アーティファクト
- アサーションへのリファレンスです。
- 使い捨てのランダムな文字列と発行したサイトの識別子で構成されます。
- ブラウザのリダイレクト経由でアサーションをサイト間で引き渡すことを避けるため、アーティファクトを介しています。
- アーティファクトを使う最大の理由は、アサーションのサイズです。(アサーションはでかい!)
- なお、SAML仕様では、アサーションをブラウザのリダイレクト経由で直接引き渡す方式(Browser/POST profile)も規定されていますが、アーティファクトを使う方式(Browser/Artifact
profile)の方が一般的です。
GSSOの基本フロー
- 1. ユーザは自分のアカウントが登録されているサイトAにログインします。
- ポータル画面から、サイトBのWebアプリケーションへのリンクをたどります。
- サイトAはユーザにアーティファクトを発行してユーザをサイトBにリダイレクトします。
- ユーザは、アーティファクトをサイトBに提示します。
- サイトBは、アーティファクトをサイトAに提示します。
- サイトAは、自分がどのユーザに発行したアーティファクトであるかわかるため、対応するユーザのアサーションを発行して返信します。
- サイトBは、アサーションの中身をチェックします。そのユーザがサイトAで「認証済であること」、および、送られてきた属性情報を信用して、ユーザにセッションを発行します。
- サイトBは、ユーザにWebアプリケーションへのアクセスを許可します。
その後、このユーザは、サイトA、サイトBで再度認証を受けずにWebアプリケーションにアクセスできます。(グローバルシングルサインオン)
GSSOのアクセスパターン
前記の例ではポータルからリンクをたどっていますが、アクセスパターンは以下の2つに分類されています。
- Source-Site First
- "ポータル型"アクセス。
- ユーザは、自分がアカウントを持つサイトにログイン後、リンクをたどって連携先のサイトにアクセスします。
- リンクはSAMLを意識したURLになっています。
- Destination-Site First
- "直打ち"アクセス。
- ユーザは、未認証のまま、URLを直打ちする等して連携先のサイトのアプリケーションにアクセスします。
Destination-Site First
このアクセスパターンは「Source-Site First」を少しだけ応用したものです。
- ユーザは、未認証のまま、URLを直打ちする等して連携先のサイトのアプリケーションにアクセスします。
- 未認証であるため、ユーザは一旦、アカウントを持つサイトにリダイレクトされて認証を受ける必要があります。
この際に、以下の2点の「細工」をすると、その後は「Source-Site First」と同じフローとなります。
- ユーザのアカウントが登録されたサイトを判定します。(選択画面やクッキーの利用等。)
- ユーザがもともとアクセスしようとしていたアプリケーションのURLをTARGETパラメータとしてセットしてから、アーティファクトを発行するサービスにリダイレクトします。
HP IceWall SSOでは、ユーザExitルーチンとCGIプログラムで実装した実績があります。

Destination-Site First
アサーションは信用できるか?
繰り返しになりますが、SAMLによるGSSOは、アサーションを信用することで成り立ちます。このため、SAML仕様ではアサーションに対する攻撃については特に考慮されています。例として、以下のような規定があります。
- アーティファクトの一意性、有効期限。(リプレイ攻撃防止)
- 発行者によるXML署名。(改ざん防止)
- SSLによる通信経路の暗号化。(盗聴防止)
ただし、重要なことがひとつ。アサーションを発行するサイトの運用が信用できるかは、インタフェース仕様ではどうにも規定できません。
ログアウトは?
ここまで読んでいただくと、では、ログアウトはどうなるのか、という疑問がわくと思います。残念ながら、SAML1.1では、「シングルサインオン」はできますが、「シングルログアウト」という概念はありません。シングルログアウトは、SAML1.xから発展したLiberty ID-FFやSAML2.0で規定されています。
おまけ - IDフェデレーション(account linkage)
サイト間の認証の連携のバリエーションとして、「IDフェデレーション」(account linkage)があります。ユーザが各サイトに既にアカウントを持っている場合に、1つをマスターアカウントとして他のサイトのアカウントをそれに結びつける機能です。一旦アカウントを結びつけた後は、マスターアカウントでログインをすることでGSSOが実現できます。これは、SAML1.x仕様の拡張仕様であるLiberty ID-FFではじめて規定された機能です。SAML2.0にも取り込まれました。
|