Open Source Solution Technology

OpenSSO社内勉強会第二回- SAML -オープンソース・ソリューション・テクノロジ株式会社
2009/12/1
野村健太郎
Copyright © 2009 Open Source Solution Technology- 1 -目次 概要

SAMLとは– SSOの全体像– SAMLによるSSO実現のための準備– SSOの開始–

 詳細

SAMLの構成要素– SAMLアサーション– SAMLプロトコル– SAMLバインディング– デモ– その他–

Copyright © 2009 Open Source Solution Technology- 2 -概要 - SAMLとは？
 SAML：Secure Assertion Markup Lauguage 認証、認可、ユーザ属性情報などをXMLで送受信するためのフレームワーク（「Markup Lauguage」だが、言語だけの規約ではない）–

公式サイトより：「XML-based framework for communicatinguser authentication, entitlement, and attribute information.」 「認証情報」を、「どんなフォーマット（XML）」で、「どの通信プロトコルを使って」送受信するか規定する
 最新バージョンがSAML2.0

Copyright © 2009 Open Source Solution Technology- 3 -概要 - SAML仕様の原文
 http://www.oasis-open.org/specs/index.php から入手可能saml-authn-context-2.0-os.pdf– saml-bindings-2.0-os.pdf– saml-conformance-2.0-os.pdf– saml-core-2.0-os.pdf– saml-glossary-2.0-os.pdf– saml-metadata-2.0-os.pdf– saml-profiles-2.0-os.pdf– saml-sec-consider-2.0-os.pdf–

 それぞれが数十ページ。なんとか挫折せずに読める文

章量…

Copyright © 2009 Open Source Solution Technology- 4 -概要 - SAMLでのSSO全体像
Identity Provider
(IdP)

・認証基盤
・ID管理

Service Provider(SP)

IdP-SP間で通信（１）ログイン認証情報（アサーション）認証情報（アサーション）（２）サービスへアクセス（ログイン操作なし）

ユーザ

ブラウザ経由の通信

ユーザ

SP

事業者Bのサービス（foo.com）

認証情報（アサーション）エンティティと呼ぶ（entity：主体、存在）
IdP

事業者Aのサービス（hoge.com）

認証情報（アサーション）・XMLで認証情報をやりとりする
・Cookieではない
Copyright © 2009 Open Source Solution Technology- 5 -概要 - SAMLでSSOを実現するための準備（１）IdPの設置（３）CoTの構成（２）SPの設置

トラストサークル（Circle of Trust - Cot）
アカウント連携
SPIdP
アカウント連携
アカウント連携

ID/パスワード（４）アカウント連携の許諾（ユーザ毎）
Copyright © 2009 Open Source Solution Technology

ユーザ情報
- 6 -

概要 - トラストサークル（Circle of Trust CoT）
 信頼の輪

 CoT内のSPに対してのみSSO可SP2
SP1IdP

SP2

SP2
Circle of Trust

能 IdP-SP間でお互いを事前に登録し、CoTを構成しておく必要がある
 一つのCoT内に複数のIdPが存在することもある

Copyright © 2009 Open Source Solution Technology- 7 -概要 - アカウント連携（１） IdPのアカウントとSPのアカウントを紐付ける
 NameIDというユーザ識別子をIdPとSP間で共有することで実現する
 NameIDには以下のものが使用される

メールアドレス– X.509のSubject– ユーザ属性情報（ユーザIDなど。Google Appsはこのタイプ）– 仮名：ランダムな文字列によるユーザ識別–Copyright © 2009 Open Source Solution Technology- 8 -概要 - アカウント連携（２）SP

IdP



ユーザA

abc

ユーザ１


仮名

IdP



uidattr

ユーザ１

IdPのアカウントとSPのアカウントを仮名（仮IDのようなもの）で紐付ける
IdP/SP内のアカウント情報(ユーザIDなど)を隠蔽したままアカウント連
携可能
ユーザ毎に設定する：初回のみ、IdPとSPにそれぞれのID/パスワー
ドでログインする必要あり

ユーザ属性情報による連携

SP

ユーザA

仮名による連携

IdPのアカウントとSPのアカウントをユーザ属性で直接連携
自システム内の情報の一部を相手に知らせる必要がある
Google Apps はこの方式

Copyright © 2009 Open Source Solution Technology- 9 -概要 - 認証連携（SSO）
 CoTの構成・アカウント連携が完了して、SSO可能になる

・認証基盤
・ID管理
（１）ログインユーザ

Identity Provider(IdP)

Service Provider(SP)

IdP-SP間で通信
認証情報（アサーション）認証情報（アサーション）（２）サービスへアクセス（ログイン操作なし）
ブラウザ経由の通信事業者Aのサービス（hoge.com）

事業者Bのサービス（foo.com）

認証情報（アサーション）Copyright © 2009 Open Source Solution Technology- 10 -

概要 - アカウントのライフサイクル
 アカウント作成～SSOの利用～アカウント削除のサイクル
アカウントの作成
アカウント連携

IdPとSPの間でシングルサインオンアカウントを連携することを許諾する

サービス利用
ログアウト

アカウント連携完了後にシングルサインオン可能となるアカウント連携の解除
アカウント削除
Copyright © 2009 Open Source Solution Technology- 11 -

詳細 - SAMLの構成要素
プロファイルWeb SSO等を実現するためのアサーション、プロトコル、バインディングの組み合わせ方法を規定

バインディング
SAML要求・応答メッセージを通信プロトコル（HTTP,SOAPなど）にマッピングする方法を規定

ユーザがSPにアクセスすると、SPはIdPに対して認証要求を送信し、IdPは認証要求に対する認証応答を返す。
SAML認証要求メッセージをbase64エンコードしてHTTPメッセージボディに埋め込んでPOSTする

プロトコルアサーションをやりとりするための要求・応答メッセージを規定

アサーション
認証情報、属性情報、権限許諾情報の格納方法を規定

認証要求(XML)に対して、情報YYYを含んだ認証応答(XML)を返す
XMLのこの要素に情報XXXを格納する※分かり易くするために、不正確かもしれないので注意
Copyright © 2009 Open Source Solution Technology- 12 -

詳細 - アサーション
 IdPが発行するユーザに関する証明情報のXML<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0"ID="s2907181983bc6f588aeb045fca183d671224506ec" IssueInstant="2009-11-18T08:28:09Z">
アサーション発行者
アサーションのデジタル署名
アサーションの利用条件
ユーザ識別子(NameID)</saml:Assertion>

Copyright © 2009 Open Source Solution Technology- 13 -

詳細 – SAMLプロトコル 認証要求（AuthnRequest）–

SPがIdPに対して、ユーザの認証情報を要求する<samlp:AuthnRequest ID=”xxx” Version=”2.0”
Destination=”http://idp.osstech.co.jp/idp/sso”>
認証要求情報が入る</samlp:AuthnRequest>

 認証応答（Response）–

IdPがSPにユーザの認証情報（アサーション）を送付する<samlp:Response ID=”xxx” Version=”2.0” Destination”http://sp.osstech.co.jp/sp/sso”>< saml:Assertion ...>
アサーションが入る</saml:Assertion></samlp:AuthnRequest>

Copyright © 2009 Open Source Solution Technology- 14 -

詳細 - バインディング（Binding）
 SAMLメッセージを既存の通信プロトコル（HTTP、SOAPなど）にマッピングする（埋め込む）方法を規定
 IdP-SP間の通信有無で分けてみる（一番使いそうなやつだけ抜粋）–

無：HTTP Redirect、HTTP POSTバインディング
 HTTP Redirect：Google Apps （認証要求）で利用されている
 HTTP POST：Google Apps（認証応答）、salesforceで利用されている–

有：HTTP Arifactバインディング

Copyright © 2009 Open Source Solution Technology- 15 -

詳細 - HTTP Redirect/POST バインディング ブラウザが通信を中継し、IdP-SP間の通信が発生しない
IdP（１）ログインユーザ

認証情報（アサーション）認証情報（アサーション）（2）アサーションが返される

SP（２）サービスへアクセス（ログイン操作なし）

アサーションを
HTTP Redirect もしくは HTTP Post で送信

方式

説明

特徴

HTTP Redirect

SAMLのメッセージをBase64エンコードしてURLパラメータに載せてGETメソッドで送信(HTTP 302 を利用)。

URLが長すぎると、ブラウザのURLの長さ制限に引っかかる可能性がある(IEは2,083文字らしい)

HTTP POST

Base64エンコードしたSAMLメッセージをHTMLフォームに載せてPOSTメソッドで送信。JavaScript
で自動的にPOSTリクエストを送信させるのが一般的？
Google Apps、salesforceはこのタイプ。

IdPへのログイン→SPへの遷移を自動化す
るには、ブラウザでJavaScriptが実行可能となっている必要がある

Copyright © 2009 Open Source Solution Technology- 16 -

詳細 - HTTP Redirect/POST バインディング
Browser SPのコンテンツへアクセス

SP

ユーザは未認証

SAML認証要求メッセージ（AuthnRequest）

IdP

HTTP Redirect or POST

ログイン画面
ユーザ認証（ユーザID/パスワード送信）
SAML認証応答メッセージ（Response、認証情報（アサーション）を含む）

アサーション
生成

HTTP Redirect or POST
SPのコンテンツ

Copyright © 2009 Open Source Solution Technology- 17 -

詳細 – HTTP Artifactバインディング Artifact：SAMLメッセージ識別用のランダム文字列 Artifactを利用して、IdP-SP間で直接SAMLメッセージを送受信する（SOAPを利用） アサーションがクライアントに渡ることがない
IdP（SP）（４）アサーションをSPへ送信（１）ログインArtifact

ユーザ

認証情報（アサーション）Artifact（３）Artifactを使用してSAMLメッセージをIdPへ問い合わせ

SP（IdP）（２）ブラウザ経由でArtifactをSPに送信（５）サービスへアクセス（ログイン操作なし）

Copyright © 2009 Open Source Solution Technology- 18 -

詳細 – HTTP Artifact バインディング
Browser SPのコンテンツへアクセス
Artifactをリダイレクトリ

SP

ユーザは未認証

IdP

Artifact 生成「SAML認証要求メッセージ」を要求
ArtifactRequest メッセージ
ArtifactResponse メッセージ

SAML認証要求

ログイン画面表示→ユーザ認証（ユーザID/パスワード）
アサーションとArtifactを生成

Artifactをリダイレクトリ
ArtifactRequest メッセージ「SAML認証応答メッセージ」を要求

ArtifactResponse メッセージ

SAML認証応答

SPのコンテンツ

Copyright © 2009 Open Source Solution Technology- 19 -

デモ
1. Google AppsのSAML認証がHTTP POSTバインディングで行われる様子を見てみる
2. LDAPに保存されているNameIDを直接いじってみる•

OpenSSOにはユーザAでログインし、Google AppsにはユーザBでログインする

Copyright © 2009 Open Source Solution Technology- 20 -

詳細 – シングルログアウトプロファイル
SP1

IdP

SP2
ログアウト要求メッセージ
アサーションを発行した全てのSPにログアウト要求メッセージを送付
ログアウト要求メッセージ

Artifact、Redirect、POST バインディング

ログアウト結果送付

ログアウト結果送付

OpenSSO ＋ Google Apps ＋ Liferay ＋ Alfresco のデモで、Google Apps からログア
ウトすると Liferay からもログアウトするが、これはSAMLのシングルログアウトではない。
Copyright © 2009 Open Source Solution Technology- 21 -詳細 - メタデータ
 SAMLでSSOを利用するためには、あらかじめCoTの構成、アカウント連携などを行っておく必要がある。これらの作業に必要な情報をまとめたXMLデータをメタデー
タという。
 メタデータがあれば、IdP、SPの構築作業が楽になる
 例：Google Apps のメタデータ↓<EntityDescriptor entityID="google.com" xmlns="urn:oasis:names:tc:SAML:2.0:metadata"><SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat><AssertionConsumerService index="1"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="https://www.google.com/a/ドメイン名/acs" /></SPSSODescriptor></EntityDescriptor>
Copyright © 2009 Open Source Solution Technology- 22 -

詳細 - アサーションへのXMLデジタル署名
 アサーションの改竄によるユーザなりすましなどを防ぐために、XMLデジタル署名を付加する
 IdPの証明書をSPに登録しておく必要がある

Copyright © 2009 Open Source Solution Technology- 23 -

参考 – Liferay と Alfresco のログアウト
OpenSSO(IdP)

Google Apps(SP)

チェック
不合格

OpenSSO(IdP)

Google Apps

Sessionアサーション

意図せずログアウト

毎回Cookeiの正当性を確認

Liferay

Liferay

CookieCookie
初回だけ
Cookeiの正当性を確認

ユーザ
Cookieユーザ
CookieAlfresco

Liferay と Alfresco は Cookie でログインセッションを管理

Google からログアウト(SAMLシングル
ログアウトプロファイル)

Alfrescoログインしたまま（キャッシュしているため）

Copyright © 2009 Open Source Solution Technology- 24 -

参考文献
 LIBERTY ALLIANCE のセミナー資料。最初に読むならこれがおすすめ（今回の勉強会資料の元ネタ）–

http://wiki.projectliberty.org/images/9/94/080215_JapanSIG_Technical_Seminar.pdf

 SAML仕様の原文–

http://www.oasis-open.org/specs/index.php#saml

 実システムでのSAML–

Google Apps： http://code.google.com/intl/ja/apis/apps/sso/saml_reference_implementation.ht

ml http://code.google.com/intl/ja/apis/apps/articles/shibboleth2.0.html–

salesforce http://www.salesforce.com/community/crm-best-practices/it-professionals/application-development/sso.jsp

Copyright © 2009 Open Source Solution Technology- 25 -