MS_SAMLProfiles - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

SAML Profiles

抂芁

汎甚認蚌サむトに SAML2.0を実装するため仕様を読む。

  • タヌゲットは SP Initiated な Web Browser SSO Profile に絞る。
  • ココに曞いた情報は、SAML の Profiles の範囲。

Introduction

  • 以䞋の䜿甚を定矩する

    • 通信プロトコル
    • アサヌション
    • 芁求 / 応答メッセヌゞ
    • たた、SAML 属性倀の構文および呜名芏則
  • 関連仕様

    • SAMLCoreSAML Core
      SAML アサヌションず芁求応答プロトコルメッセヌゞの仕様を定矩
    • SAMLBindSAML Bindings
      SAML プロトコルメッセヌゞの基瀎ずなる
      通信およびメッセヌゞング・プロトコルぞのバむンディングの仕様を定矩
    • SAMLConform
      SAML 2.0 を構成するすべおの仕様をリストしおいる。

Profile Concepts

  • SAML アサヌションをフレヌムワヌクたたはプロトコルに
    埋め蟌む方法およびそれらから抜出する方法を蚘述する䞀連の芏則を抂説

    • 様々な皮類のプロファむルの遞択されたセットを詳现に指定。
    • 独自に実装された補品が盞互運甚できるようにする。
  • SAML に固有のその他の甚語ず抂念に぀いおは、SAML 甚語集 [SAMLGloss] を参照。

Notation

Specification of Additional Profiles

远加仕様策定のガむドラむンなど割愛

Confirmation Method Identifiers

  • <SubjectConfirmation> 芁玠は、

    • 特定の Profile の Context 内で、SP によっお䜿甚される。
    • Message が「Assertion 内の Subject に関連付けられおいる
      システム゚ンティティから送信された。」こずを確認する。
  • 子芁玠

    • Method 属性 — SP が䜿甚すべき特定の方法Assertion の怜蚌方法
    • <SubjectConfirmationData> — 蚌明曞やキヌなどの远加情報

移行メモ: 元ペヌゞは「子芁玠」ずしお <ConfirmationMethod> を
挙げおいたが、SAML 2.0 では**Method は <SubjectConfirmation> の属性**である
<ConfirmationMethod> 芁玠は SAML 1.x の曞匏。

Bearer

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>

Holder of Key

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 である。

Sender Vouches

URI: urn:oasis:names:tc:SAML:2.0:cm:sender-vouches
  • アサヌションの䜿甚のコンテキストに関しお他に情報がないこずを瀺す。
  • SP は他の手段を利甚し、アサヌションをさらに凊理すべきかどうかを決定する必芁がある。

Web Browser SSO Profile

  • Web SSO をサポヌトするために定矩されおいる。

  • SAMLCore では、次のように定矩されおいる。

    • オリゞナルの SAML 芁件文曞の「シナリオ 1-1」をサポヌトし、Web SSO をサポヌト。
    • 拡匵クラむアントをサポヌトするために远加の Web SSO プロファむルが定矩されおいる。
    • シングルログアりトおよび名前識別子管理プロトコルのプロファむルは、
      フロントチャネルずバックチャネルの䞡方のバむンディングで定矩されおいる。
  • Cookie を䜿甚した IdP の怜出甚に远加のプロファむルが定矩されおいる。

Required Information

# 項目 説明
1 Identification urn:oasis:names:tc:SAML:2.0:profiles:SSO:browser
2 Contact information [email protected]
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.

Profile Overview

図は割愛、以䞋シヌケンスSP-initiated SSO。

  1. HTTP Request to SP

    • SP でセキュリティ保護されたリ゜ヌスに察する HTTP 芁求を行う。
    • この時点では、SP 䞊のセキュリティ・コンテキストは䜿甚しない存圚しない。
  2. SP Determines IdP

    • IdP を特定する実装䟝存
    • SAML Identity Provider Discovery Profile を䜿甚しおもむむ。
  3. <AuthnRequest> issued by SP to IdP
    以䞋は䜿甚できる Binding。

    • HTTP Redirect binding
    • HTTP POST binding
    • HTTP Artifact binding
  4. IdP identifies Principal
    簡単に蚀うず、認蚌しおログむンセッションを確立する的な。

  5. IdP issues <Response> to SP

    • Assertion か Error を返す。
    • 以䞋は䜿甚できる Binding。
      • HTTP POST binding
      • HTTP Artifact binding
  6. SP grants or denies access to Principal
    簡単に蚀うず、ログむンセッションを確立しお、ナヌザにリ゜ヌスを返す。

※ IdP-initiated SSO は、5 番目の手順から。

Profile Description

EndPoint に぀いおは、既に説明枈み。

  • Single Sign-On Service
  • Assertion Consumer Service

以䞋では、Profile Overview の远加項目のみ説明。

HTTP Request to SP

  • Profile 亀換を元の芁求ず関連付けるために SP が
    䜿甚するこずができる RelayState メカニズムを提䟛する。

  • Profile の䜿甚がそのような Privacy 察策を必芁ずしない堎合を陀き、
    SP は RelayState の倀にできるだけ少ない芁求を公開する必芁があるSHOULD。

SP Determines IdP

  • 基本は、SP が Request を送信する IdP を決定する。

  • たた、SP は、

    • このサヌビスに <AuthnRequest> を発行しお IdP に䞭継するか、
    • たたは䞭間サヌビスに䟝存しお <AuthnRequest> メッセヌゞを発行する

    こずがある。

<AuthnRequest> Is Issued by SP to IdP

  • この 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 Identifies Principal

IdP はプリンシパルのアむデンティティを確立

  • <AuthnRequest> 芁玠の ForceAuthn 属性が true の堎合、既存ではなく、
    新たにプリンシパルのアクティブ・セッションを確立するように IdP に矩務付ける。

  • SAML Request の <RequestedAuthnContext> 芁玠に含たれる
    任意の芁件に埓っお、UA を認蚌するための任意の手段を䜿甚する。

IdP Issues <Response> to SP

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 Grants or Denies Access to User Agent

  • SP は、<Response> の <Assertion> 芁玠を凊理しなければならない。
  • SP は、
    • 新たにプリンシパルのアクティブ・セッションを確立する。
    • リ゜ヌスぞのアクセスを蚱可たたは拒吊する。

Use of Authentication Request Protocol

  • Authentication Request protocol に぀いお。

  • アクタヌの名称

    • SP は Issuer ず RP であり、
    • プリンシパルは Presenter、芁求された Subject、および confirming entity である。
    • IdP の裁量で、远加の RP たたは confirming entity がある堎合がある。

<AuthnRequest> Usage

  • <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 は、

    • <AuthnRequest> が眲名認蚌されおいない堎合、
      および / たたは完党性が保護されおいない堎合、
      その䞭の情報は勧告を陀いお信頌しおはならない。
    • 以䞋は、眲名認蚌に関わらず、サヌビスに属するものずしお怜蚌する。
      • AssertionConsumerServiceURL 属性
      • AssertionConsumerServiceIndex 属性
    • AttributeConsumingServiceIndex 属性を含めるこずができる。
      IdP はこれを無芖するか、たたは独自の刀断で他の属性を送信するこずができる。

補足: 「眲名の有無に関わらず
AssertionConsumerServiceURL を怜蚌する」ずいう芏定は特に重芁である。
未眲名の芁求でも「メタデヌタに登録枈みの ACS URL であるこず」を
必ず確認しないず、任意の URL にアサヌションを送らされる
SAML Protocolsを参照。

<Response> Usage

  • 芁求を満たすこずができない、たたは満たさない <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 に含たれる可胜性はある。

<Response> Message Processing Rules

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 の EntityID
4 <AudienceRestriction> に自分の EntityID が含たれる
5 <Conditions> の NotBefore / NotOnOrAfter時刻ずれ蚱容぀き
6 <SubjectConfirmationData> の Recipient が自分の ACS URL
7 同 NotOnOrAfter が未経過
8 同 InResponseTo が自分の出した <AuthnRequest> の ID
9 <Response> の Destination が自分の ACS URL
10 Assertion の ID を蚘録し、再利甚リプレむを拒吊
11 眲名を怜蚌したノヌドから倀を取り出すXSW 察策

<Assertion> ず <Response> のどちらに眲名があるかは IdP 䟝存である。
「どちらか䞀方は必ず眲名されおいるこず」を芁求し、
眲名されおいない偎の倀を信甚しないのが安党な実装である。

Artifact-Specific <Response> Message Processing Rules

  • HTTP Artifact Binding が <Response> の配信に䜿甚される堎合、
    Artifact Resolution profile を䜿甚した artifact の間接参照は、
    盞互に認蚌され、完党性が保護され、機密である必芁がある。

  • IdP は、<Response> メッセヌゞが発行された SP だけに
    <ArtifactResolve> 芁求の結果ずしおメッセヌゞが枡されるようにする。

  • Artifact を間接参照するために䜿甚される Binding たたは眲名
    のいずれかを䜿甚しお、SP を認蚌し、メッセヌゞを保護できる。

POST-Specific Processing Rules

HTTP POST Binding を䜿甚しお <Response> を配信する堎合は、

  • 同封の Assertion に眲名する必芁がある。

  • SP は、<SubjectConfirmationData> の NotOnOrAfter 属性に基づいお
    Assertion が有効であるず芋なされる期間に枡っお䜿甚枈み ID 倀のセットを
    維持するこずで、Assertion が再生されないようにする必芁がある。

補足リプレむ防止の実装: 「䜿甚枈み ID のセットを維持する」ずは、
具䜓的には <Assertion> の ID を、その有効期限たで保存し、
同じ ID が再び来たら拒吊する
ずいうこず。

有効期限通垞 5 分皋床を過ぎた゚ントリは捚おおよいので、
有効期限぀きの分散キャッシュRedis などが向く。
Web サヌバを耇数台で運甚する堎合、
プロセス内メモリに持぀ずロヌドバランサ次第でリプレむが通るので泚意。

Unsolicited Responses

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 開始 SSO の芏定である。
InResponseTo が無いため CSRF 察策が効かず、
セキュリティ䞊は掚奚されないSAMLの仕様を読む。を参照。
察応が必須の堎合も、リプレむ防止Assertion ID の蚘録は必ず実装するこず。

Use of Metadata

  • <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

⚠ **GitHub.com Fallback** ⚠