組織間SSOを実現する
利用者は組織のIdPで一度認証し、連携する複数のSPへ個別パスワードを登録せずアクセスできます。
Specification
Identity ProviderとService Providerの間で認証・属性・認可判断をXML Assertionとして交換する、企業SSOで広く使われる仕様です。
Overview
SAML 2.0は、組織やサービスの境界を越えて認証結果とユーザー属性を交換するためのXMLベースの標準です。企業向けSingle Sign-Onで広く利用され、ログインを担当するIdentity Provider(IdP)と、アプリを提供するService Provider(SP)を分離します。
代表的なWeb Browser SSOでは、SPがAuthnRequestをIdPへ送り、ユーザーがIdPで認証します。IdPは署名付きSAML ResponseとAssertionをブラウザ経由でSPのAssertion Consumer Serviceへ返し、SPが検証後にローカルセッションを開始します。
Purpose and responsibilities
利用者は組織のIdPで一度認証し、連携する複数のSPへ個別パスワードを登録せずアクセスできます。
AssertionにSubject、認証時刻、認証Context、所属や役割などのAttributeを含められます。
Entity ID、Endpoint、証明書、対応BindingをMetadataとして交換し、連携相手と検証鍵を事前設定します。
Key concepts
Security considerations
仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。
SAML ResponseまたはAssertionの署名を信頼済みIdP証明書で検証し、未署名部分の参照を避けます。
Issuer、Audience、Recipient、Destination、InResponseTo、有効時間をSP自身の要求と照合します。
Assertionを一度だけ受理し、短い有効時間とID記録でReplayを防ぎます。
XML Signature Wrappingを防げる実績あるライブラリを使い、独自XML署名検証を実装しません。
Position and relationship
SAMLとOpenID ConnectはどちらもFederated LoginとSSOに利用できます。SAMLはXMLとブラウザPOST/Redirect Bindingを中心とし、OIDCはOAuth 2.0、JSON、JWT、RESTとの親和性が高いため、Web・モバイルの新規サービスではOIDCが選ばれることが多いです。
Other specifications