「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>SAML]]

* 目次 [#a06b9ed3]
#contents

*概要 [#vbc3dabd]
-汎用認証サイトにSAML2.0を実装するため仕様を読む。
-ターゲットはWeb Browser SSO Profileに絞る。

**ロードマップ [#sf77f12f]

***Technical Overview [#pd627a26]
SAML2.0 の 技術概要

***[[Profiles>#m2dca880]] [#kb883fb8]
特定のユースケースを実現するための組み合わせ方を定義。

-セキュリティ情報を伝達するためのSAMLの豊富で柔軟な~
構文を使用および制限するための一連の特定の規則を定義。
-属性プロファイルの構文の側面をカバーするいくつかの関連する小さなスキーマ。

***[[Bindings>#k4afd6db]] [#g931e8e8]
-SAMLアサーションと要求/応答プロトコル・メッセージを交換する方法を定義
-SAMLのメッセージを実際の通信プロトコル(HTTPなど)にマッピングする方法を定義。

***Core([[Assertions>#i94f5010]] and [[Protocols>#w2f5d61a]]) [#c88e28ae]
-認証、属性、許可情報を記述したプロトコル・メッセージを伝達する~
XMLエンコードアサーションを作成するための構文とセマンティクス

-アサーション用とプロトコル用のスキーマを定義する。
--認証情報を表す用のXMLのスキーマ(SAML Assertions)
--メッセージ交換のプロトコル用のXMLのスキーマ(SAML Protocols)

***[[SAML Metadata>#fcb8eb3c]] [#q8f094d8]
-SAMLパーティ間で設定情報を表現および共有するXMLのスキーマを定義
-SPがIdPを利用するための情報を記述して、IdPとSPの信頼関係を構築できる。
--エンティティのサポートされているSAMLバインディング
--運用上の役割(IDP、SPなど)
--識別子情報、サポートID属性
--および暗号化と署名のための鍵情報

***[[Authentication Context>#fcb8eb3c]] [#s446c19b]
-認証メカニズムを記述する認証コンテキスト宣言を記述するための構文を定義
-認証のタイプと強度に関する詳細な情報をSPが要求し、IdPは、これに応答する。
--認証コンテキスト宣言を作成するためのメカニズムを定義する一般的なXMLスキーマ
--一般的に使用されるSAMLの認証コンテキストクラスのセットがあります。

***XML Signature Syntax and Processing [#tfaf9dfe]
XMLデジタル署名処理規則と構文

**ユースケース [#n6964f09]

***参加者 [#b51c01cb]

-システム・エンティティ~
システム・エンティティは、さまざまなSAMLロールで動作するが、~
最低限、SAML交換は、以下のシステム・エンティティ間で行われる。

--アサーティング・パーティ(SAMLオーソリティ)
---SAMLアサーションを行うシステム・エンティティ
---ユーザもアサーティング・パーティの参加者である可能性がある。

--リライング・パーティ(RP)~
受け取ったアサーションを使用するシステム・エンティティ

-リクエスタ / レスポンダ
--アサーティング・パーティとリライング・パーティは、SAMLリクエスタにもレスポンダにもなりうる。
--アサーティング・パーティの情報に依存するという回答側の意向は、アサーティング・パーティとの信頼関係に依存

-ロール

--SSOのロール

---Identityプロバイダ(IdP)~
≒ アサーティング・パーティ(SAMLオーソリティ)

---Serviceプロバイダ(SP)~
≒ リライング・パーティ

--のロール

---属性リクエスタ~
アイデンティティ属性クエリ

---属性機関の役割~
アイデンティティ属性クエリに応答してSAMLエンティティがアサーションを生成

-サブジェクト≒プリンシパル
--殆どのSAMLアサーションの中心にある対象
--通常は人間、それ以外にも会社やコンピュータなどエンティティを表す。

-あとは、だいたい、[[OpenID Connect]]と同じ。

***Web-SSO [#rc0fec8e]
-マルチドメインWebシングルサインオン
-SAMLが適用される最も重要なユースケース

-これも、あとは、だいたい、[[OpenID Connect]]と同じ。

***IDフェデレーション [#vb0acf73]
-考慮しなければならない多くの質問
--ユーザーは、既存のローカルIDをサイトに持っているか?
--ユーザーの連合IDの確立と終了は静的か?動的か?
--ユーザーは連合IDの確立に明示的に同意する必要があるか?
--ユーザーに関するID属性を交換する必要があるか?
--IDフェデレーションは、SessionIDなどの識別子に依存するべきか?
--情報が暗号化されるべきか?交換される情報のプライバシーは大きな関心事か?

-連合ID機能を強化するための2つの機能
--フェデレーション名識別子の動的確立と管理をサポートする、新しい構成とメッセージ
--プライバシー保護の特徴を持った2つの新しいタイプの名前識別子

-プロバイダー間のユーザー情報の維持および更新
--追加のフローは必要のないケース。
--追加のフローが必要になるケース。~
SAML V2.0メッセージ交換の外部で行われるケース
---IdPにおけるデータソースによって駆動され、
---SPに伝播されるバッチまたはオフラインのIDフィードを利用

***アカウントリンク [#q6750564]
-連合IDをローカルIDと関連付けるプロセスは、アカウントリンクと呼ばれる。
--IdP検出機能を使用し、SPからIdPにアカウントリンクするかしないかをユーザに問う。
--ユーザが、フェデレーションに同意するとIdPにリダイレクトされる。
--IdPでSPのフェデレーション名識別子が生成され、IdP上のアカウントにリンクされる。
--IdPでSPは、後続のトランザクションでこの識別子を使用してユーザを参照する。
--IdPからSPにリダイレクトされた後、この識別子をSPのローカル・アカウントに関連付ける。

※ 追加のサイトとアカウントリンクする場合は、~
 新たにフェデレーション名識別子を生成し、上記手順を繰り返す。

*アーキテクチャ [#n8e9f1a2]

**基本概念 [#ddcc00d7]

***基本的なSAMLの概念 [#f1f1efc7]
 (プロファイル(バインディング(プロトコル(アサーション))))
 
                      ・メタデータ
                      ・認証コンテキスト

***Assertions [#i94f5010]
アサーティング・パーティが真実であると主張するプリンシパルに関する~
ステートメントを伝えるXMLスキーマによって定義されたアサーション。
-リライング・パーティからの要求に基づいてアサーティング・パーティによって作成される。
-特定の状況下では、アサーションは未承諾の方法でリライング・パーティに配信できる。

***Protocols [#w2f5d61a]
-SAMLのリクエスト / レスポンスを行うプロトコル。
-これにより、アサーションの入手や、IDマネジメントを行う。

***Bindings [#k4afd6db]
参加者間でSAMLプロトコル・メッセージを転送するために下位レベルの~
通信またはメッセージングプロトコル(HTTPまたはSOAPなど)を使用する方法

***Profiles [#m2dca880]
-WebブラウザSSOプロファイルなどの特定のユースケースを満たすように定義される。
-SAMLアサーション、プロトコル、およびバインディングの内容に対する制約を定義する。
-プロトコルメッセージやバインディングを参照しない属性プロファイルもある。~
(X.500 / LDAP、DCEなどの一般的な使用環境と一致する方法でアサーションを使用)

***構築と展開の2つの概念 [#fcb8eb3c]
-SAML Metadata
-Authentication Context

**高度な概念 [#g32a27e9]

***Subject Confirmation [#f0e95372]
-Assertionsには、SubjectConfirmationという要素を含めることができる。

-実際的には、Subject Confirmationは...。

-Method属性に3つの値を定義することによって、~
3つの異なるセキュリティシナリオに対応する。

--urn:oasis:names:tc:SAML:2.0:cm:bearer~
所謂、一つの、[[持参人切符>トークン#b38de47f]]

--urn:oasis:names:tc:SAML:2.0:cm:holder-of-key~
SubjectConfirmationDataを使用した、[[記名式切符>トークン#b38de47f]]

--urn:oasis:names:tc:SAML:2.0:cm:sender-vouches~
どのRPがそのClaimを使用することを許可されるべきかを決定する際に他の基準を使用

**SAML Components [#z682ff17]

***Assertions [#ob41551e]
通常、アサーションは以下から構成される。

-アサーションのsubject
--subject(主題)
--subjectが存在しない場合、他の方法で識別される。~
例えばsubjectの確認に使用された証明書

-アサーションの検証条件

-アサーション・ステートメント

--Authentication statements
---ユーザーを正常に認証した当事者によって作成される。
---最低でも、認証に使用される特定の手段と認証が行われた特定の時間を説明。

--Attribute statements
---サブジェクトに関する特定の識別属性
---例えば、ユーザー"John Doe"は"ゴールドカードステータス"を持つ。

--Authorization decision statements
---対象がする権利があるものを定義する
---例えば、ユーザー"John Doe"は"特定の品目を購入すること"が許可されている。

***Protocols [#c03d25d8]
いくつかの一般化された要求/応答プロトコルを定義する。

-Authentication Request Protocol

--以下を含むアサーションを要求できるようにする手段を定義。
---Authentication statements
---Attribute statements

--Web Browser SSO Profile~
SPからIdPにユーザをリダイレクトするときに使用する。

-Single Logout Protocol
--プリンシパルのアクティブセッションのログアウト・メカニズムを定義。
--ログアウトは以下の様なエンティティが開始できる。
---ユーザ(直接開始
---SP/IdP(Sessionタイムアウト、管理者コマンド

-Assertion Query and Request Protocol~
アサーションを取得するための一連のクエリを定義

-Artifact Resolution Protocol~
アーティファクトと呼ばれる小さな固定長の値を使用して、~
メッセージを参照によって渡すことができるメカニズムを提供

-Name Identifier Management Protocol
--要求の発行者は、SP/IdPのどちらでもかまわない。
--プリンシパルを参照するために使用される名前識別子に関するメカニズムを提供。
---形式を変換する
---関連付けを開始 / 終了する

-Name Identifier Mapping Protocol

--適切なポリシー制御に従って、名前識別子を~
別の名前識別子にマッピングするためのメカニズムを提供

--アプリケーション統合シナリオでは、あるSPがIdPから~
別のSPで使用できるユーザーの名前識別子を要求することを許可する。

***Bindings [#tf061676]
トランスポート層上で、プロトコルメッセージをどのように伝達するか?

-HTTP Redirect Binding~
リダイレクト(302応答)を使用してプロトコルメッセージを転送する方法を定義

-HTTP POST Binding~
HTMLのformコントロール(base64)でプロトコルメッセージを転送する方法を定義

-HTTP Artifact Binding
--Artifact Resolution Protocolを使用して、プロトコルメッセージを転送する方法を定義
--HTMLのformコントロールと、URL中のQuery stringを使用する方法がある。

-SAML SOAP Binding~
SOAP 1.1を使用して、プロトコルメッセージが転送される方法を定義

-Reverse SOAP (PAOS) Binding
--HTTPクライアントをSOAPレスポンダにする多段階のSOAP / HTTPメッセージ交換を定義
--IDPディスカバリをサポートする拡張クライアントおよびプロキシで使用

-SAML URI Binding~
URIを解決することによって既存のSAMLアサーションを取得するための手段を定義

***Profiles [#ddf7fc83]
特定シナリオでアサーション、プロトコル、バインディングの組合せ(制約)を定義

-Web Browser SSO Profile~
標準のWebブラウザでシングルサインオンを実現する

--以下の使用方法を定義する。
---Authentication Request Protocol
---SAML Response messages & assertion

--バインディングの組合せを定義
---HTTP Redirect Binding
---HTTP POST Binding
---HTTP Artifact Binding

-Enhanced Client and Proxy (ECP) Profile
--特殊クライアントまたはゲートウェイプロキシ用の
--Reverse-SOAP (PAOS) や SOAPを使用する特殊SSOプロファイルを定義す。

-Identity Provider Discovery Profile~
ユーザが以前に訪問したことのあるIdPについてSPが知るためのメカニズムを定義

-Single Logout Profile

--以下の使用方法を定義する。
---Single Logout Protocol
---SAML Response messages & assertion

--バインディングの組合せを定義
---HTTP Redirect Binding
---HTTP POST Binding
---HTTP Artifact Binding
---SAML SOAP Binding

-Assertion Query and Request Profile
--同期バインディング

--以下の使用方法を定義する。
---Assertion Query and Request Protocol
---SAML Response messages & assertion

-Artifact Resolution Profile

--以下の使用方法を定義する。
---Artifact Resolution Protocol

--バインディングを定義
---SAML SOAP Binding

-Name Identifier Management Profile

--以下の使用方法を定義する。
---Name Identifier Management Protocol

--バインディングの組合せを定義
---HTTP Redirect Binding
---HTTP POST Binding
---HTTP Artifact Binding
---SAML SOAP Binding

-Name Identifier Mapping Profile

--以下の使用方法を定義する。
---Name Identifier Mapping Protocol

--バインディングを定義
---SAML SOAP Binding

**SAML XML構造と例 [#t9f9470e]

***SAMLコンポーネントとの関係 [#f15c31d8]
Transport Protocol
-Transport Protocol ヘッダ
-Transport Protocol ペイロード
--レスポンス(アサーション)
---Authentication statements
---Other statements

***アサーション、サブジェクト、ステートメントの構造 [#da3c974b]
-単一の認証ステートメントを含むアサーションの例を含むXMLフラグメント
単一の認証ステートメントを含むアサーションの例を含むXMLフラグメント

 <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0" IssueInstant="2004-12-05T09:22:05Z">
   <saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">
     https://idp.example.org/SAML2
   </saml:Issuer>
   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
   <saml:Subject>
     <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
       testuser@gmail.com
     </saml:NameID>
   </saml:Subject>
   <saml:Conditions
     NotBefore="2004-12-05T09:17:05Z"
     NotOnOrAfter="2004-12-05T09:27:05Z">
   </saml:Conditions>
   <saml:AuthnStatement
     AuthnInstant="2004-12-05T09:22:00Z" SessionIndex="xxxxxxxxxxx">
     <saml:AuthnContext>
       <saml:AuthnContextClassRef>
         urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
       </saml:AuthnContextClassRef>
     </saml:AuthnContext>
   </saml:AuthnStatement>
 </saml:Assertion>

-
 <samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="identifier_2" InResponseTo="identifier_1" Version="2.0" IssueInstant="2004-12-05T09:22:05Z" Destination="https://sp.example.com/SAML2/SSO/POST">
   <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer>
   <samlp:Status>
     <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
   </samlp:Status>
   <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="identifier_3" Version="2.0" IssueInstant="2004-12-05T09:22:05Z">
     <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer>
     <!-- a POSTed assertion MUST be signed -->
     <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
     <saml:Subject>
       <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">3f7b3dcf-1674-4ecd-92c8-1544f346baf8</saml:NameID>
       <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
         <saml:SubjectConfirmationData InResponseTo="identifier_1" Recipient="https://sp.example.com/SAML2/SSO/POST" NotOnOrAfter="2004-12-05T09:27:05Z"/>
       </saml:SubjectConfirmation>
     </saml:Subject>
     <saml:Conditions NotBefore="2004-12-05T09:17:05Z" NotOnOrAfter="2004-12-05T09:27:05Z">
       <saml:AudienceRestriction>
           <saml:Audience>https://sp.example.com/SAML2</saml:Audience>
         </saml:AudienceRestriction>
     </saml:Conditions>
     <saml:AuthnStatement AuthnInstant="2004-12-05T09:22:00Z" SessionIndex="identifier_3">
         <saml:AuthnContext>
           <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
         </saml:AuthnContext>
     </saml:AuthnStatement>
   </saml:Assertion>
 </samlp:Response>

*以下、参考 [#f7980123]
-SAML 実装仕様書 第Ⅰ編 概要、~
用語及び参考文献 第 1.0 版~
医療分野共通認証基盤整備コンソーシアム~
https://www.keieiken.co.jp/medit/pdf/240423/7-data.pdf

-SAML認証に関する自分なりのまとめ~
なんとな~くしあわせ?の日記~
https://nantonaku-shiawase.hatenablog.com/entry/2016/07/13/081053

-SAML Profiles ~ SSOだけじゃなく色んなシナリオあるって知ってた? ~ - Qiita~
https://qiita.com/samiii/items/6096723dfbebf049ec73

*SAMLの仕様 [#ed1566a6]
-SAML Specifications | SAML XML.org~
http://saml.xml.org/saml-specifications

*OASIS [#j3a3bbae]
OASISは「SGML Open」として1993年、

>主に「研修活動を通じたSGMLの採用促進を目的として」結成された、

SGMLツール業者の業界団体。

**SAML 1.0 [#nc13d236]
-http://www.oasis-open.org/committees/download.php/2290/oasis-sstc-saml-1.0.zip

-SAML 1.0(XML Security Assertion Markup Language)~
http://www.oasis-open.org/committees/security/#documents

--Assertions and Protocol[SAML Core]~
http://www.oasis-open.org/committees/security/docs/cs-sstc-core-01.pdf

---SAMLのAssertionsのスキーマと要求/応答プロトコルを定めた仕様

--Bindings and Profiles[SAML Bind]~
http://www.oasis-open.org/committees/security/docs/cs-sstc-bindings-01.pdf

---SAMLをSOAPとHTTPにバインドする仕組みとSSOプロファイルの規定

--Security and Privacy Considerations[SAML Sec]~
http://www.oasis-open.org/committees/security/docs/cs-sstc-sec-consider-01.pdf

---SAMLのセキュリティ要件を考察したもの

--Conformance Program Specification[SAML Conform]~
http://www.oasis-open.org/committees/security/docs/cs-sstc-conform-01.pdf

---SAMLの相互運用性を確保するために適合性要件をまとめたもの

--Glossary[SAML Gross]~
http://www.oasis-open.org/committees/security/docs/cs-sstc-glossary-01.pdf

**SAML 1.1 [#bbfbf034]
-http://www.oasis-open.org/committees/download.php/3400/oasis-sstc-saml-1.1-pdf-xsd.zip

**SAML 2.0 [#ta30f79c]
http://docs.oasis-open.org/security/saml/v2.0/saml-2.0-os.zip

-Security Assertion Markup Language (SAML) V2.0 Technical Overview - OASIS~
http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html

-以下を読むとイイらしい。~
>以下の[[Qiita>#ddcb6595]]を参考にすると、TechnicalOverview をざっと眺めて、~
どの Profile か選択してから Profile, binding, core と見ていくとイイらしい。
-https://www.oasis-open.org/committees/download.php/27819/sstc-saml-tech-overview-2.0-cd-02.pdf
-https://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf
-https://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf
-https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
-https://www.w3.org/TR/xmldsig-core1/

-その他、ロードマップに含まれるもの。
--SAMLAuthnCxt~
http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf
--SAMLMeta~
http://docs.oasis-open.org/security/saml/v2.0/saml-metadata-2.0-os.pdf

**Reference [#r10980ea]

***用語集 [#obb9527d]
-SAML仕様全体を通して使用される用語を規範的に定義
-可能な限り、用語は他のセキュリティ用語集で定義されている用語と一致させてある。

-SAMLGloss~
http://docs.oasis-open.org/security/saml/v2.0/saml-glossary-2.0-os.pdf

***適合要件 [#t20f88fb]
-SAMLConform~
http://docs.oasis-open.org/security/saml/v2.0/saml-conformance-2.0-os.pdf

***セキュリティとプライバシーに関する考慮事項 [#k221450f]
SAMLのセキュリティとプライバシーの特性について分析/説明。

-SAMLSec~
http://docs.oasis-open.org/security/saml/v2.0/saml-sec-consider-2.0-os.pdf

***Security [#kdc1295a]
http://www.oasis-open.org/committees/security/.

-SAMLExecOvr
--エグゼクティブの概要
--SAMLとその主な利点についてエグゼクティブレベルで簡単に説明(非規範的な文書)。

-SAMLMDV1x~
SAML V1.x OASIS規格をサポートするSAMLエンティティ~
を記述するためのSAML V2.0メタデータ構成体の使用

-SAMLMDExtQ~
クエリ要求者用のSAMLメタデータ拡張

-SAMLProt3P
--サードパーティの要求に対するSAMLプロトコルの拡張を定義
--SAMLプロトコルの拡張意図された応答受信者以外のエンティティによる要求を容易にするため

-SAMLX509Attr~
X.509認証ベースシステム用のSAML属性共有プロファイル

-SAMLXPathAttr~
属性名としてXPath URIを使用するためのSAML属性の使用をプロファイル

-SAMLErrata
--正誤表
--SAML準拠ソフトウェアの実装者によって使用される可能性のある解釈へのガイド
--SAML V2.0規格の矛盾や不明確である点の解釈を明確化する。

***WSS [#wd2114df]
http://www.oasis-open.org/committees/wss/

-WSS~
Web Services Security: SOAP Message Security 1.1 (WS-Security 2004).

-WSSSAML~
Web Services Security: SAML Token Profile 1.1. OASIS WSS-TC, February 2006.

***XML(W3C) [#ce725f0c]

-XMLSig~
XML署名の構文と処理~
http://www.w3.org/TR/xmldsig-core/

-XMLEnc~
XML暗号化の構文と処理~
http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/

***Else [#r47c9a91]
-ShibReqs~
Shibbolethの概要と要件~
http://shibboleth.internet2.edu/docs/draft-internet2-shibboleth-requirements-01.html

-XACML~
OASIS拡張アクセス制御マークアップ言語(XACML)バージョン2.0~
http://www.oasis-open.org/committees/xacml

**参考 [#j9247af2]
-OASIS | Advancing open standards for the information society~
https://www.oasis-open.org/

-OASIS (組織) - Wikipedia~
https://ja.wikipedia.org/wiki/OASIS_(%E7%B5%84%E7%B9%94)

*OSSTech [#i952f8dc]

**OpenSSO社内勉強会第二回 - SAML - [#d78049dd]
https://www.osstech.co.jp/_media/techinfo/opensso/osstech-opensso-study-02-saml.pdf

***概要 [#deef9de1]
-SAMLとは
--認証情報の送受信の方法を規定する
---フォーマット(XML)
---通信プロトコル

--仕様の原文~
http://www.oasis-open.org/specs/index.php から入手可能
---saml-core-2.0-os.pdf
---saml-bindings-2.0-os.pdf
---saml-profiles-2.0-os.pdf
---saml-authn-context-2.0-os.pdf
---saml-metadata-2.0-os.pdf
---saml-conformance-2.0-os.pdf
---saml-sec-consider-2.0-os.pdf
---saml-glossary-2.0-os.pdf

-SSO実現のための準備~
信頼の輪(Circle of Trust - Cot)の準備
--CoT内のSPに対してのみSSO可能
--IdP-SP間でお互いを事前に登録(CoTを構成)
--一つのCoT内に複数のIdPが存在することもある

-アカウント連携

--NameIDというユーザ識別子をIdPとSP間で共有
--IdPのアカウントとSPのアカウントを紐付ける

--NameIDには以下のものが使用される
---メールアドレス
---ユーザー名
---ユーザID(GUIDなどの識別子)
---仮名:ランダムな文字列によるユーザ識別
---X.509のSubject

-アカウント・ライフサイクル~
サインイン・サインアウト < 連携・解除 < 作成・削除

-SSOの開始
--CoTの構成・アカウント連携が完了して、SSO可能に
--[[OpenID Connect]] の Authorization Code Flow の Tokenリクエストが無い感じ。

***詳細 [#g8efb8ed]
SAMLの構成要素

-アサーション~
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>

-プロトコル

--認証要求(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>

-バインディング
--メッセージを既存の通信プロトコルに埋め込む方法を規定

--IdP-SP間の通信有無で分類すると...。

---無:HTTP Redirect、HTTP POST~
[[OAuth 2.0 Form Post Response Mode]] みたいな

---有:HTTP Artifact~
アサーションがクライアントに渡ることがない、~
[[OpenID Connect]] の Authorization Code Flow の code みたいな~
(ただ、IdPからSPへの通信があるようなので、コレが何かは別途確認が必要)

-メタデータ
--CoTの構成、アカウント連携に必要な情報
--これにより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>

**クラウド時代の シングルサインオン [#bc874894]
https://www.osstech.co.jp/_media/techinfo/seminar/hbstudy-20110416-sso.pdf

***SAML概要 [#g7fa118a]
***概要 [#g7fa118a]
-SAML : Secure Assertion Markup Lauguage
-認証、認可、ユーザ属性情報などを[[XML]]で送受信するための仕様
-Webアプリの”認証処理”を、外部で代行してもらうための仕組み。

***SAML用語 [#t41413c4]
***用語 [#t41413c4]
-SP/IdP
--Identity Provider(IdP)
---認証・認可の情報を提供する役割を担う。~
---IdPで認証されたユーザーは SP のサービスにアクセスできるようになる。
--Service Provider(SP)
---シングルサインオン対象の Web アプリケーションなどを意味する。
---IdP が発行した認証・認可の情報に応じてクライアントにサービスを提供する。

-トラストサークル(Circle Of Trust)~
--IdP と SP の間で結ばれた信頼関係を意味する。
--シングルサインオンを実現するためには、~
IdP と SP との間で事前に信頼関係を結んでおく必要がある。
--IdP-SP 間でお互いを事前に登録し、お互いの証明書を交換する。
--IdP-SP 間でお互いを事前に登録し、&color(red){お互いの証明書を交換する。};
--一つのトラストサークル内に複数の IdP が存在することもある

>※同じ言葉でも、他のプロトコルでは意味が違うことがあるので注意

-アカウント連携
--IdP のアカウントと SP のアカウントを紐付ける
--NameID というユーザー識別子を IdP と SP 間で共有することで実現する
--NameID には以下のものが使用される
---メールアドレス
---ユーザー名
---GUIDなどの識別子
---X.509 の Subject
-[[アカウント連携>#deef9de1]]

***シーケンス [#of7ce633]
-認証シーケンス
--SP-initiated SSO
---ユーザーは最初にSPにアクセスし、IdPでの認証に成功した後に、再びSPにアクセスする。
---なお、SPがIdPにリクエストする際に、RelayStateというパラメタに遷移先情報を埋め込む。

--IdP-initiated SSO~
---ユーザーは最初にIdPにアクセスし、IdPでの認証に成功した後にSPにアクセスする。
---SAML RelayStateというパラメタに遷移先情報を埋め込む。

-メッセージの送受信方法

--HTTP Redirect/HTTP POST Binding
--HTTP Redirect / HTTP POST Binding
---IdP-SP間の直接的な通信が発生しない
---ブラウザが通信を中継する(HTTP Redirect/HTTP POST を利用)

--HTTP Artifact Binding
---アサーションへのリファレンスである Artifact をブラウザを介してIdPとSPの間で送受信する。~
IdPと SP は Artifact を利用して直接相手に SAML 認証要求/認証応答メッセージを問い合わせる。
---IdP-SP間の直接的な通信が発生する。
---Artifact のデータサイズは小さい。

***SAMLアサーション [#gb7ace7c]
***アサーション [#gb7ace7c]
事前に IdP の証明書を SP に登録しておく必要がある([[JWT]]みたいなもの)
 <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>

***認証要求・認証応答 [#uc6a393c]
-認証要求(AuthnRequest)~
SPがIdPに対して、ユーザーの認証情報(アサーション)を要求するメッセージ
 <samlp:AuthnRequest ID=”xxx” Version=”2.0”
  Destination=”http://idp.osstech.co.jp/idp/sso”>
 <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”>
 <samlp:Response ID="xxx" Version="2.0"
  Destination"http://sp.osstech.co.jp/sp/sso">
     < saml:Assertion ...>
         アサーション
     </saml:Assertion>
 </samlp:AuthnRequest>

***ネットワーク構成 [#md96ac81]
-IdPを社内LANに設置~
SPへのアクセスを社内のみからに制限することが可能

-IdPをDMZに設置~
社外からSPにアクセスすることが可能

**OpenAMのSAML利用時の認証方式の指定について [#l06dcf33]
https://www.osstech.co.jp/_media/techinfo/openam/saml_authncontext_20150417.pdf

*Cybozu [#a583f88d]

**SAML認証ができるまで Cybozu Inside Out サイボウズエンジニアのブログ [#b96fa2da]
http://developer.cybozu.co.jp/tech/?p=4224

SAMLはSecurity Assertion Markup Languageの略で、OASIS3によって策定された、~
異なるセキュリティドメイン間で、認証情報を連携するための[[XML]]ベースの標準仕様。

***SAML用語 [#n5a6bfc5]
-認証情報を提供する側をIdentity Provider(IdP) 
-認証情報を利用する側をService Provider(SP)

***SAMLの仕様 [#ge5ed415]

-SAML Core~
認証情報を表す[[XML]]のスキーマ(SAML Assertions)と、~
メッセージ交換のプロトコル(SAML Protocols)を定義。

-SAML Bindings~
SAMLのメッセージを実際の通信プロトコル(HTTPなど)にマッピングする方法を定義。

-SAML Profiles~
特定のユースケースを実現するための組み合わせ方を定義。
--SAML Assertions
--SAML Protocols
--SAML Bindings

-SAML Metadata~
IdPやSPに関する情報を表現するための[[XML]]のスキーマを定義(IdPとSPの信頼関係を構築)。

*Wikipedia [#ha1d962a]

**en [#hd81af2f]
-Security Assertion Markup Language~
https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language

--SAML 1.1~
https://en.wikipedia.org/wiki/SAML_1.1

--SAML 2.0~
https://en.wikipedia.org/wiki/SAML_2.0

--SAML Metadata~
https://en.wikipedia.org/wiki/SAML_Metadata

**ja [#re9f6f6f]
-Security Assertion Markup Language~
https://ja.wikipedia.org/wiki/Security_Assertion_Markup_Language

*[[SAMLを実装する。]] [#z5f336d0]

----
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:SAML]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS