SAML(Security Assertion Markup Language)
基礎
ID 情報を安全にやり取りするための XML 形式の通信仕様
事前に信頼関係を構築し、信頼関係に基づいて ID 情報を連携する仕組みを用いている
ID 連携を実現する主要要素
- 通信定義
- アサーション
- Token
- ユーザの ID 名や認証方式及びそのユーザの属性や権限に関する表明
- 認証アサーション
- 認証結果の伝達に用いる
- 属性アサーション
- 属性情報の伝達に用いる
- 認可決定アサーション
- アクセス制御情報の伝達に用いる
- Token
- プロトコル
- アサーションの送受信を実施するためのリクエストおよびレスポンスの手続き
- バインディング
- リクエスト及びレスポンスの手続きを、実際に IdP と RP の間でどのように実施するかを規定
- SOAP やユーザエージェントを介在させる HTTP リダイレクト通信などが存在
- プロファイル
- SSO などを実現するうえでの、アサーション、プロトコル、バインディングの組み合わせを規定
- 通信定義
サンプル
<saml:AttributeStatement> <saml:Attribute FriendlyName="fooAttrib" Name="SFDC_USERNAME" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"> user101@salesforce.com </saml:AttributeValue> </saml:Attribute> </saml:AttributeStatement>
- RP Initiated
- まずアプリに接続
- アプリからリダイレクトされる
- IdP Initiated
- まず IdP に接続してトークンをもらう
- 好きな時にトークンをアプリに渡してあげて、そこで認証を解決する
- クレームはアプリケーション側が指定
- xx な情報を持ってきたらアプリを使わせてあげる
- クレームを出すかどうかは
IdP
が判断する - 認証情報に加え,属性情報とアクセス制御情報を異なるドメインに伝達するための Web サービスプロトコル
- これを用いてほかのドメインとの間で認証情報を交換することで、同一ドメインに留まらない大規模なサイトにおいてもシングルサインオンの仕組みやセキュアな認証情報管理を実現できる
- OASIS(Organization for the Advanced of Structured Information Standards) によって策定
- 国際的な非営利団体の標準化団体
- 2002 年に XML 情報を交換する方法として策定
- 相互に信頼関係を構築した Web サイト間で共通のログイン情報を提供する役割を担うまでに進化
- XMLベースは開発者に好まれない?
- IdP が発行するアサーション(Asertion)をサービスプロバイダーに提示することでサービスプロバイダー側はユーザが認証済の正規ユーザであることを確認
- ジャスト・イン・タイムユーザプロビジョニング
- 1 回の登録で外部サービスにも登録
- SAML では IdP と SP 間で要求メッセージ(SAMLRequest)・応答メッセージ(SAMLResponse) を送受信するために HTTP や SOAP 等のプロトコルにマッピングする手法(バインディング) として次のような種類がある
- SOAP バインディング
- SOAP を用いてアサーションを送る
- HTTP Redirect バインディング
- Base64 エンコードしたアサーションを HTTP GET メソッドで送る
- HTTP POST バインディング
- Base64 エンコードしたアサーションを HTTP POST メソッドで送る
- HTTP Artifact バインディング
- Artifact を HTTP リダイレクトで送る
- Artifact
- アサーションへのリファレンス情報
- ランダムな文字列と発行したサイトの識別子
- SOAP バインディング