-
Notifications
You must be signed in to change notification settings - Fork 0
MS_SAMLProfiles
- 戻る(SAMLの仕様を読む。)
- SAML Profiles
- SAML Bindings
- SAML Core
汎用認証サイトに SAML2.0を実装するため仕様を読む。
- ターゲットは SP Initiated な Web Browser SSO Profile に絞る。
- ココに書いた情報は、SAML の Profiles の範囲。
-
以下の使用を定義する
- 通信プロトコル
- アサーション
- 要求 / 応答メッセージ
- また、SAML 属性値の構文および命名規則
-
関連仕様
-
SAMLCore(SAML Core)
SAML アサーションと要求応答プロトコルメッセージの仕様を定義 -
SAMLBind(SAML Bindings)
SAML プロトコルメッセージの基礎となる
通信およびメッセージング・プロトコルへのバインディングの仕様を定義 -
SAMLConform
SAML 2.0 を構成するすべての仕様をリストしている。
-
SAMLCore(SAML Core)
-
SAML アサーションをフレームワークまたはプロトコルに
埋め込む方法およびそれらから抽出する方法を記述する一連の規則を概説- 様々な種類のプロファイルの選択されたセットを詳細に指定。
- 独自に実装された製品が相互運用できるようにする。
-
SAML に固有のその他の用語と概念については、SAML 用語集 [SAMLGloss] を参照。
- 技術文書中での Shall / Should / May
- この仕様では従来の XML 名前空間プレフィックスが使用される。
- , etc.
追加仕様策定のガイドラインなど(割愛)
-
<SubjectConfirmation>要素は、- 特定の Profile の Context 内で、SP によって使用される。
- Message が「Assertion 内の Subject に関連付けられている
システムエンティティから送信された。」ことを確認する。
-
子要素
-
Method属性 — SP が使用すべき特定の方法(Assertion の検証方法) -
<SubjectConfirmationData>— 証明書やキーなどの追加情報
-
移行メモ: 元ページは「子要素」として
<ConfirmationMethod>を
挙げていたが、SAML 2.0 では**Methodは<SubjectConfirmation>の属性**である
(<ConfirmationMethod>要素は SAML 1.x の書式)。
URI: urn:oasis:names:tc:SAML:2.0:cm:bearer
- Assertion の Subject ≒ Assertion の所有者
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData
InResponseTo="_1234567890"
Recipient="https://www.serviceprovider.com/saml/consumer"
NotOnOrAfter="2004-03-19T13:27:00Z"/>
</SubjectConfirmation>URI: urn:oasis:names:tc:SAML:2.0:cm:holder-of-key
-
<SubjectConfirmationData>要素内に 1 つ以上の<ds:KeyInfo>要素が必要。
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:holder-of-key">
<SubjectConfirmationData xsi:type="saml:KeyInfoConfirmationDataType">
<ds:KeyInfo>
<ds:KeyName>By-Tor</ds:KeyName>
</ds:KeyInfo>
<ds:KeyInfo>
<ds:KeyName>Snow Dog</ds:KeyName>
</ds:KeyInfo>
</SubjectConfirmationData>
</SubjectConfirmation>補足: Holder of Key は、
アサーションの提示者が対応する秘密鍵を持っていることを別途証明する方式で、
盗まれても使えない(= 記名式)という利点がある。
OAuth の DPoP / mTLS 送信者制約トークンと同じ発想。ただし SAML の Web SSO では、
ブラウザに鍵の証明をさせる手段がないためほぼ使われない。
実運用はほぼすべてbearerである。
URI: urn:oasis:names:tc:SAML:2.0:cm:sender-vouches
- アサーションの使用のコンテキストに関して他に情報がないことを示す。
- SP は他の手段を利用し、アサーションをさらに処理すべきかどうかを決定する必要がある。
-
Web SSO をサポートするために定義されている。
-
SAMLCore では、次のように定義されている。
- オリジナルの SAML 要件文書の「シナリオ 1-1」をサポートし、Web SSO をサポート。
- 拡張クライアントをサポートするために追加の Web SSO プロファイルが定義されている。
- シングルログアウトおよび名前識別子管理プロトコルのプロファイルは、
フロントチャネルとバックチャネルの両方のバインディングで定義されている。
-
Cookie を使用した IdP の検出用に追加のプロファイルが定義されている。
| # | 項目 | 説明 |
|---|---|---|
| 1 | Identification | urn:oasis:names:tc:SAML:2.0:profiles:SSO:browser |
| 2 | Contact information | security-services-comment@lists.oasis-open.org |
| 3 | SAML Confirmation Method Identifiers | SAML 2.0 "bearer" confirmation method identifier, urn:oasis:names:tc:SAML:2.0:cm:bearer
|
| 4 | Updates | SAML V1.1 の browser artifact / POST profiles / bearer confirmation method. |
図は割愛、以下シーケンス(SP-initiated SSO)。
-
HTTP Request to SP
- SP でセキュリティ保護されたリソースに対する HTTP 要求を行う。
- この時点では、SP 上のセキュリティ・コンテキストは使用しない(存在しない)。
-
SP Determines IdP
- IdP を特定する(実装依存)
- SAML Identity Provider Discovery Profile を使用してもイイ。
-
<AuthnRequest>issued by SP to IdP
以下は使用できる Binding。- HTTP Redirect binding
- HTTP POST binding
- HTTP Artifact binding
-
IdP identifies Principal
簡単に言うと、認証してログインセッションを確立する的な。 -
IdP issues
<Response>to SP- Assertion か Error を返す。
- 以下は使用できる Binding。
- HTTP POST binding
- HTTP Artifact binding
-
SP grants or denies access to Principal
簡単に言うと、ログインセッションを確立して、ユーザにリソースを返す。
※ IdP-initiated SSO は、5 番目の手順から。
EndPoint については、既に説明済み。
- Single Sign-On Service
- Assertion Consumer Service
以下では、Profile Overview の追加項目のみ説明。
-
Profile 交換を元の要求と関連付けるために SP が
使用することができるRelayStateメカニズムを提供する。 -
Profile の使用がそのような Privacy 対策を必要としない場合を除き、
SP はRelayStateの値にできるだけ少ない要求を公開する必要がある(SHOULD)。
-
基本は、SP が Request を送信する IdP を決定する。
-
また、SP は、
- このサービスに
<AuthnRequest>を発行して IdP に中継するか、 - または中間サービスに依存して
<AuthnRequest>メッセージを発行する
ことがある。
- このサービスに
-
この HTTP の通信には、TLS を使用する。
-
SP によって選択された Binding に基づき、
- SSO Service の場所が決定される。
- SAMLMeta を Binding 選択に使用することができる。
-
<AuthnRequest>を送信するために- UA による HTTP Request に応答し、
- 使用されている Binding に応じた HTTP レスポンスを UA に返し、
- IdP の SSO Service に配信される。
-
機密性とメッセージの完全性を維持することが推奨される。
-
<AuthnRequest>メッセージに署名することができる。 - HTTP Artifact binding の場合は、Artifact が間接参照されたとき
リクエスト発行者を認証するための代替手段も提供される。
-
-
IdP は
<AuthnRequest>メッセージを処理する。
IsPassive属性が含まれている場合、
UA とのその後のやりとりを制限する可能性がある。
IdP はプリンシパルのアイデンティティを確立
-
<AuthnRequest>要素のForceAuthn属性がtrueの場合、既存ではなく、
新たにプリンシパルのアクティブ・セッションを確立するように IdP に義務付ける。 -
SAML Request の
<RequestedAuthnContext>要素に含まれる
任意の要件に従って、UA を認証するための任意の手段を使用する。
IdP は、<AuthnRequest> の成功または失敗にかかわらず、UA 経由で、
指定の Binding と Protocol で Assertion Consumer Service に応答する。
-
この HTTP の通信には、TLS を使用する。
-
SP は、
- 使用する SAML Binding
- Assertion Consumer Service の場所
を示すことができる。
-
Assertion Consumer Service の場所は、
SAMLMeta を使用して決定される場合がある。 -
機密性とメッセージの完全性を維持することが推奨される。
-
<Response>内の<Assertion>要素は、署名することができる。 - HTTP POST binding が使用されている場合は署名が必要。
- HTTP Artifact binding が使用されている場合は必要に応じて署名。
-
- SP は、
<Response>の<Assertion>要素を処理しなければならない。 - SP は、
- 新たにプリンシパルのアクティブ・セッションを確立する。
- リソースへのアクセスを許可または拒否する。
-
Authentication Request protocol について。
-
アクターの名称
- SP は Issuer と RP であり、
- プリンシパルは Presenter、要求された Subject、および confirming entity である。
- IdP の裁量で、追加の RP または confirming entity がある場合がある。
-
<AuthnRequest>には<Issuer>要素が必須-
<Issuer>要素のFormat属性は、省略するか、
urn:oasis:names:tc:SAML:2.0:nameid-format:entityの値を指定。
-
-
SP は、
- IdP のサインアップを許可する場合、
<AuthnRequest>に、
AllowCreate属性を"true"に設定した<NameIDPolicy>要素を含める。 - ID を指定する場合、
<AuthnRequest>に、<Subject>要素を含める。
(ただし、<SubjectConfirmation>要素を含んではいけない。) - 必要に応じて、
<AuthnRequest>メッセージを署名(認証)する。- HTTP Artifact binding が使用されている場合、オプションで署名(認証)。
- その他の Binding によって許可されている任意のメカニズムが使用されてもよい。
-
SAMLMeta 内の必要な属性または必須の属性に関する情報を参照する、
AttributeConsumingServiceIndex属性を含めることができる。
- IdP のサインアップを許可する場合、
-
IdP は、
-
<AuthnRequest>が署名(認証)されていない場合、
および / または完全性が保護されていない場合、
その中の情報は勧告を除いて信頼してはならない。 - 以下は、署名(認証)に関わらず、サービスに属するものとして検証する。
-
AssertionConsumerServiceURL属性 -
AssertionConsumerServiceIndex属性
-
-
AttributeConsumingServiceIndex属性を含めることができる。
IdP はこれを無視するか、または独自の判断で他の属性を送信することができる。
-
補足: 「署名の有無に関わらず
AssertionConsumerServiceURLを検証する」という規定は特に重要である。
未署名の要求でも「メタデータに登録済みの ACS URL であること」を
必ず確認しないと、任意の URL にアサーションを送らされる
(SAML Protocolsを参照)。
-
要求を満たすことができない、または満たさない
<AuthnRequest>に対し、
適切なエラーステータスコードを含み Assertion を含まない<Response>で応答する。 -
要求が成功した場合(または応答が要求に関連付けられていない場合)
<Response>要素は以下に従う。-
<AuthnRequest>に応答している場合、
<AuthnRequest>のID属性が<Response>の
InResponseTo属性と一致する必要がある。 -
<Issuer>要素- 省略可能
- しかし、IdP の一意識別子は必要。
-
Format属性は、省略するか、
urn:oasis:names:tc:SAML:2.0:nameid-format:entityの値を指定。
-
<Assertion>要素 — 必須、1 つ以上必要 -
<Assertion>要素の<Issuer>要素-
Format属性は、省略するか、
urn:oasis:names:tc:SAML:2.0:nameid-format:entityの値を指定。
-
-
<AuthnStatement>要素- 必須、
<Assertion>セットに対して 1 つ以上必要 -
<Subject>の<SubjectConfirmation>要素が必要で、
Method属性には、urn:oasis:names:tc:SAML:2.0:cm:bearerの値が必要。 -
<SubjectConfirmation>の<SubjectConfirmationData>要素が必要で、
RecipientとNotOnOrAfter属性が必要で、Address属性を含む可能性がある。
NotBefore属性は含んではならない。 - Single Logout profile をサポートする場合、
SessionIndex属性が必要になる。 - また、
AttributeStatementなど、他の Statement と、
その確認方法が、IdP の裁量で Assertion に含まれる可能性はある。
- 必須、
-
SAML binding に関係なく、SP は次のことをしなければならない。
-
Assertion または Response に存在する署名を確認する。
-
<SubjectConfirmationData>の-
Recipient属性が、<Response>または Artifact が
配信された Assertion Consumer Service の URL と一致することを確認する。 -
NotOnOrAfter属性を確認し、有効期間の終了時点に達していないことを確認する。 -
InResponseTo属性が、<AuthnRequest>のID属性と等しいことを確認する。 -
Address属性が含まれている場合、SP は UA のアドレスをチェックしてもよい(MAY)。
-
-
ローカルログオンセキュリティコンテキストを確立するために使用しない。
- 有効ではない Assertion
- Subject 確認要件を満たすことができない Assertion
-
<AuthnStatement>のSessionNotOnOrAfter属性が含まれている場合、
この時間に達したらローカルログオンセキュリティコンテキストを破棄する必要がある。
補足(SP 側の検証チェックリスト): 上の規定に、
SAML Assertions 側の要件を合わせると、
SP が必ず行うべき検証は次のとおりになる。どれ一つ省いてはならない。
# 検証項目 1 <Assertion>(または<Response>)の署名が、信頼済みの IdP 鍵で検証できる2 署名アルゴリズムが許容範囲(SHA-1 は拒否) 3 <Issuer>が期待する IdP の EntityID4 <AudienceRestriction>に自分の EntityID が含まれる5 <Conditions>のNotBefore/NotOnOrAfter(時刻ずれ許容つき)6 <SubjectConfirmationData>のRecipientが自分の ACS URL7 同 NotOnOrAfterが未経過8 同 InResponseToが自分の出した<AuthnRequest>のID9 <Response>のDestinationが自分の ACS URL10 Assertion の IDを記録し、再利用(リプレイ)を拒否11 署名を検証したノードから値を取り出す(XSW 対策)
<Assertion>と<Response>のどちらに署名があるかは IdP 依存である。
「どちらか一方は必ず署名されていること」を要求し、
署名されていない側の値を信用しないのが安全な実装である。
-
HTTP Artifact Binding が
<Response>の配信に使用される場合、
Artifact Resolution profile を使用した artifact の間接参照は、
相互に認証され、完全性が保護され、機密である必要がある。 -
IdP は、
<Response>メッセージが発行された SP だけに
<ArtifactResolve>要求の結果としてメッセージが渡されるようにする。 -
Artifact を間接参照するために使用される Binding または署名
のいずれかを使用して、SP を認証し、メッセージを保護できる。
HTTP POST Binding を使用して <Response> を配信する場合は、
-
同封の Assertion に署名する必要がある。
-
SP は、
<SubjectConfirmationData>のNotOnOrAfter属性に基づいて
Assertion が有効であると見なされる期間に渡って使用済みID値のセットを
維持することで、Assertion が再生されないようにする必要がある。
補足(リプレイ防止の実装): 「使用済み
IDのセットを維持する」とは、
具体的には<Assertion>のIDを、その有効期限まで保存し、
同じIDが再び来たら拒否するということ。有効期限(通常 5 分程度)を過ぎたエントリは捨ててよいので、
有効期限つきの分散キャッシュ(Redis など)が向く。
Web サーバを複数台で運用する場合、
プロセス内メモリに持つとロードバランサ次第でリプレイが通るので注意。
IdP は、SP に Unsolicited <Response> メッセージの配信を開始してもよい(MAY)。
-
<Response>も<SubjectConfirmationData>要素も
InResponseTo属性を含んではいけない。 -
メタデータで
<md:AssertionConsumerService>が提供される場合、
<Response>または artifact を、ここで指定された SP のエンドポイントに配信すべき。 -
特に言及するのは、
- IdP が、SP との相互の合意に基づいて、UA とのその後の対話を
どのように処理するかを示す Binding 固有のRelayStateパラメタを含んでよい。 -
RelayStateパラメタの値は、SP のリソースの URL であるかもしれない。 - SP は、応答の処理に成功した後に UA を送信するデフォルトの場所を
指定することによって、Unsolicited<Response>メッセージを処理する準備をするべき。
- IdP が、SP との相互の合意に基づいて、UA とのその後の対話を
補足: これが IdP 開始 SSO の規定である。
InResponseToが無いため CSRF 対策が効かず、
セキュリティ上は推奨されない(SAMLの仕様を読む。を参照)。
対応が必須の場合も、リプレイ防止(AssertionIDの記録)は必ず実装すること。
-
<md:IDPSSODescriptor>要素の-
<md:SingleSignOnService>要素
このプロファイルを使用して SP が IdP に要求を送信できるエンドポイントの場所を記述。 -
WantAuthnRequestsSigned属性
要求メッセージが署名されるという要件を文書化してもいい(MAY)。
-
-
<md:SPSSODescriptor>要素の-
<md:AssertionConsumerService>エンドポイント要素
IdP が SP に応答を送信する際の
サポートされている Binding とインデックス付きエンドポイントの場所の情報。-
index属性 — エンドポイントを区別するために使用される。 -
isDefault属性 — 要求で指定されていない場合に使用するエンドポイントを指定する。
-
-
<md:AttributeConsumingService>エンドポイント要素 — 属性要件のセット-
index/isDefault属性(同上)
-
-
AuthnRequestsSigned属性
要求メッセージが署名されるという要件を文書化してもいい(MAY)。 -
WantAssertionsSigned属性- Profile で配信される Assertion 署名要件の文書化が可能。
- IdP はこれに義務付けられないが、
未署名の Assertion が不十分になる可能性を認識する。 - 特定の Binding の使用によって課される署名に関する要件に加えて行われる。
-
-
署名・暗号化
-
use属性がsigning—<md:KeyDescriptor>要素を使用して、
署名に使用するキーを文書化。 -
use属性がencryption—<md:KeyDescriptor>要素を使用して、
暗号化アルゴリズムと公開キーを文書化。
-
-
<md:ArtifactResolutionService>要素
要求 / 応答メッセージに HTTP Artifact Binding を使用する場合、
1 つ以上のエンドポイント要素を提供する必要がある。 -
以下も記述でき、認証交換中にサポートできるかどうかは
ポリシーと IdP の裁量に依存する。-
<md:NameIDFormat>要素 — 特定の名前識別子の形式 -
<md:AttributeProfile>要素 — 属性プロファイル -
<saml:Attribute>要素 — 特定の属性と値
-
移行メモ(正誤):
use属性の値は元ページでsign/encryptと
なっていたが、スキーマ上の値はsigning/encryptionである。また、
<md:NameIDFormat>等の 3 要素は元ページでは
<md:ArtifactResolutionService>の子項目として並んでいたが、
これらは<md:IDPSSODescriptor>直下の要素であるため、階層を分けた。
https://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf
1 Introduction
1.1 Profile Concepts
1.2 Notation
2 Specification of Additional Profiles
2.1 Guidelines for Specifying Profiles
2.2 Guidelines for Specifying Attribute Profiles
3 Confirmation Method Identifiers
3.1 Holder of Key
3.2 Sender Vouches
3.3 Bearer
4 SSO Profiles of SAML
4.1 Web Browser SSO Profile
4.1.1 Required Information
4.1.2 Profile Overview
4.1.3 Profile Description
4.1.4 Use of Authentication Request Protocol
4.1.5 Unsolicited Responses
4.1.6 Use of Metadata
4.2 Enhanced Client or Proxy (ECP) Profile
4.2.1 Required Information
4.2.2 Profile Overview
4.2.3 Profile Description
4.2.4 ECP Profile Schema Usage
4.2.5 Security Considerations
4.3 Identity Provider Discovery Profile
4.3.1 Common Domain Cookie
4.3.2 Setting the Common Domain Cookie
4.3.3 Obtaining the Common Domain Cookie
4.4 Single Logout Profile
4.4.1 Required Information
4.4.2 Profile Overview
4.4.3 Profile Description
4.4.4 Use of Single Logout Protocol
4.4.5 Use of Metadata
4.5 Name Identifier Management Profile
4.5.1 Required Information
4.5.2 Profile Overview
4.5.3 Profile Description
4.5.4 Use of Name Identifier Management Protocol
4.5.5 Use of Metadata
5 Artifact Resolution Profile
6 Assertion Query/Request Profile
7 Name Identifier Mapping Profile
8 SAML Attribute Profiles
8.1 Basic Attribute Profile
補足(Identity Provider Discovery Profile は現在動かない):
このプロファイルは「共通ドメインの Cookie」で
「ユーザが直近どの IdP を使ったか」を SP に伝える仕組みだが、
サードパーティ Cookie の廃止により事実上機能しない。現在は次のいずれかで代替される。
- ホーム レルム ディスカバリ(HRD) — メールアドレスのドメイン部で IdP を決める
- SP 側での明示的な IdP 選択画面
- テナント別の URL(
https://sp.example.com/t/contoso/loginなど)
Tags: 移行, IT国際標準, 認証基盤, クレームベース認証, SAML
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。