Security Assertion Markup Language

Security Assertion Markup Language (SAML、発音は SAM-el、/ˈsæməl/) は、特にアイデンティティプロバイダとサービスプロバイダの間で認証および認可データを交換するための公開標準である。SAMLは、セキュリティアサーション（サービスプロバイダがアクセス制御の決定を行うために使用するステートメント）のための XML ベースのマークアップ言語である。SAMLはまた以下のものでもある: XMLベースのプロトコル・メッセージのセット プロトコル・メッセージのバインディングのセット 上記すべてを利用するプロファイルのセット SAMLが対応する重要なユースケースの1つは、ウェブブラウザのシングルサインオン (SSO) である。シングルサインオンは、セキュリティドメイン内では比較的簡単に達成できる（たとえば、クッキーを使用する場合など）、しかしセキュリティドメインを越えてSSOを拡張することはより難しく、非互換のプロプライエタリ技術の増加をもたらした。SAML Web ブラウザ SSO プロファイルは、相互運用性を促進するために指定および標準化された。 同様の技術として Securant Technologies社が発表したAuthXMLとNetegrity社 が発表したS2MLという規格があり、SAML はこの二つの規格を統合したものである。 2016年現在の最新版は2005年3月に策定されたSAML v2.0である。 SAMLの標準では、認証、属性、権限の認可をXMLでアサーション（assertion, 直訳：表明）する方法と、これらの情報を伝送するためのプロトコルとに関する文法と意味論を定義している。 アサーション(assertion, 直訳：表明)は、SAMLにおける最も基礎的な概念の一つで、これはユーザの認証情報、属性、ユーザへの権限の認可といったセキュリティ情報をXML文法で記載したものである。複数のエンティティの間でアサーションをやり取りする事で前述したシングルサインオンやID連携を実現する。 SAMLの標準はアサーションの詳細と、アサーションを伝送するためのプロトコルとに関する文法と意味論を定義している。 アサーションはサブジェクト（subject）に対するステートメント（statements）という形式でセキュリティ情報を記述できる。 ここでサブジェクトは何らかの「セキュリティ領域」（security domain）にいるエンティティで、アサートされる対象である。サブジェクトは人間であっても会社やコンピューターなどでもよい。 ステートメントには以下の三種類がある： 認証ステートメント（Authentication statements）: ユーザを認証したエンティティが作るステートメントで、例えば認証時刻や認証が行われた場所などの情報を含む。 属性ステートメント（Attribute statements）: サブジェクトの属性に関するステートメント。例えばサブジェクトの名前、年齢、性別、ゴールドカードの保持者である等。 認可決定ステートメント（Authorization decision statements）：サブジェクトに何らかの権限を与えた事を表すステートメント。例えば特定のファイルへのアクセス権限や、特定の品物を買う事ができる権限など。 SAMLのユースケースでは最低限以下の２つのパーティが関わる：アサーションを発行するSAMLアサーションパーティ（SAML asserting party、直訳：SAML表明当事者）と、アサーションを受信してそれを用いるSAMLリライングパーティ（SAML relying party、直訳：SAML依拠当事者）という。SAMLアサーションパーティはSAMLオーソリティ（SAML authority、直訳：SAML権限者）ともいう 多くのユースケースではさらにユーザが関わる。このユーザ自身がSAMLアサーションパーティであることもある。 上述の２つのパーティやユーザ、もしくはそれ以外のパーティがアサーションの送信を他のパーティに要求するとき、その要求するパーティをSAMLリクエスター（SAML requester、直訳：SAML要求者）といい、それに応じてアサーションを送信するパーティをSAMLレスポンダー（SAML responder、直訳：SAML応答者）という。 SAMLの関係者は様々なロール（役割）を担う。例えばシングルサインオンにSAMLを使う場合にはアイデンティティプロバイダというロールとサービスプロバイダというロールがある。 シングルサインオンは、ユーザが一度認証を受けるだけで複数のサービスやアプリケーションを利用できるようになる仕組みのことである。 SAMLをシングルサインオンで用いるには、ユーザが最初に認証を受けるサイトがアイデンティティプロバイダ（identity provider、 IdP）というロールを担う。そのサイトでのユーザの認証情報やログインセッションのようなセキュリティ情報をセキュリティコンテクスト(security context)と呼ぶ。 一方、IdPにおけるユーザの認証情報を信頼してサービスやアプリケーションを提供するサイトはサービスプロバイダ（service provider、SP）というロールを担う。 IdPとSPは事前に両者で用いるユーザIDを対応付けることで、IdPのどのユーザがSPのどのユーザと対応しているかを明らかにしておく（すなわちID連携しておく）必要がある。 ユーザがIdPで認証を受けたあと、SPのサービスを利用しようとすると、IdPはユーザのセキュリティ・コンテクストからアサーションを作成し、アサーションをSPに送る。 アサーションには例えばユーザに関する以下の情報が載っている： IdPとSPのユーザリストに載っている IdPとの認証で受理された SPが必要とするユーザの属性（年齢、性別、ゴールドカードのメンバーである等） 上で説明したユースケースではユーザはSPにアクセスする前にIdPに認証を受けるフロー（IdP-initiated flow）を説明したが、逆にSPにアクセスした後にIdPから認証を受けるフロー（SP-initiated flow）のほうがより一般的である。というのも検索サイトやブックマークなどから直接SPのサイトにアクセスした場合は、IdPからの認証を受ける前にユーザがSPにアクセスする事になるからである。このためSAMLは両方のフローに対応している。 saml-tech-overview　3.3 Identity Federation Use Caseを参照。 連合アイデンティティ OpenID XACML（英語版） “Assertions and Protocols for the OASIS Security Assertion Markup Language (SAML) V2.0” (PDF). OASIS Standard. 2016年8月10日閲覧。 “Security Assertion Markup Language (SAML) V2.0 Technical Overview”. OASIS. 2016年8月10日閲覧。 IT用語辞典e-words SAML 【 Security Assertion Markup Language 】 ^ “What is SAML? - A Word Definition From the Webopedia Computer Dictionary”. Webopedia.com. 2013年9月21日閲覧。 ^ https://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf ^ OASIS Standards 2016年8月10日閲覧 ^ a b c saml-core-2.0-os Abstract ^ a b c d e f g saml-tech-overview 4.3 SAML Components ^ a b c d e f saml-tech-overview　3.1 SAML Participants ^ a b c d e f g saml-tech-overview　3.2 Web Single Sign-On Use Case