1. 序章

Security Assertion Markup Language(SAML)は、プロバイダー間で承認および認証データを交換するためのオープンなフェデレーションID標準です。データは、多くのSAML対応アプリケーションとsecurityドメイン間で共有できます。 したがって、SAMLは主にSSOの目的で使用されます。 この記事では、SAMLの基本的な概念について詳しく説明します。 最新バージョンのSAML2.0に関連します。

2. SAMLとは何ですか?

SAMLは、IDプロバイダーとサービスプロバイダーの間でセキュリティデータを共有するためのXMLベースのマークアップ言語です。 IDプロバイダーは、ユーザーを認証し、ユーザーのIDとその認証レベルデータをサービスプロバイダーに送信するパーティです。

一方、サービスプロバイダーはIDプロバイダーを信頼し、ユーザーがその承認レベルに基づいてリソースにアクセスできるようにします。 したがって、SAMLは、プロバイダー間でセキュリティデータを交換するための標準化された方法を提供します。

SAMLには、プロバイダーがアクセス制御の決定を行うために使用するセキュリティアサーションが含まれています。 さらに、SAMLは、プロトコルメッセージ、プロトコルメッセージバインディング、およびプロファイルを提供できます。 これらについては、後のセクションで詳しく説明します。

3. ワークフロー

すでに述べたように、SAMLの主なユースケースはSSOです。 したがって、ユーザーは一度ログインすると、個別にログインしなくても、多くの独立したサービスにアクセスできます。 SAMLワークフローの例を見てみましょう。

  1. ユーザーがサービスプロバイダーにリソースを要求します。 サービスプロバイダーはセキュリティチェックを実行します(たとえば、 session cookieが存在する場合はチェックします)。 セキュリティチェックに合格した場合は、ポイント8に進みます。 そうでない場合は、次のポイントに進みます。
  2. サービスプロバイダーは、要求をIDプロバイダーのSSOサービスにリダイレクトします。 クエリパラメータを使用して、IDプロバイダーにSAMLRequestであることを通知します。 パラメータはデコードされ、収縮されていますエレメント。
  3. ユーザーエージェントは、リダイレクトされたURLに対してGETリクエストを実行します。 SSOサービスは、 AuthnRequest を処理し、ユーザーを識別します。
  4. 次に、SSOサービスは次のようなXHTMLフォームで応答します。
    <form method="post" action="some-action-url" ...>
        <input type="hidden" name="SAMLResponse" value="some-response-value" />
        ...
        <input type="submit" value="Submit" />
      </form>

    の値 SAMLResponse エンコードされたエレメント。

  5. ユーザーは、XHTMLフォームを使用してサービスプロバイダーのアサーションコンシューマーサービスを要求します。
  6. アサーションコンシューマサービスは、XHTMLフォームを処理し、ユーザーのセキュリティコンテキストを作成し、手順1で要求されたリソースにリダイレクトします。
  7. ユーザーがリソースを再度要求します。 これで、有効なセキュリティコンテキストが存在するため、リソースを返すことができます。
  8. サービスプロバイダーは、要求されたリソースで応答します。

それでは、ワークフローの視覚的表現を見てみましょう。

要約すると、サービスプロバイダーは、ユーザーが特定のリソースにアクセスできるかどうかを確認するために、IDプロバイダーからのセキュリティコンテキストを必要とします。 コンテキストが存在する場合は、リソースをすぐに返すことができます。 それ以外の場合は、SAML指定の要求がIDプロバイダーに送信され、セキュリティコンテキストが作成されます。

セキュリティコンテキストを使用すると、ユーザーは個別にログインしなくても、この特定のIDプロバイダーを信頼する複数のサービスにアクセスできます。

4. 建築

このセクションでは、SAML要素を簡単に紹介します。 完全な仕様は、公式SAML仕様ページにあります。 ここでは、アサーション、プロトコル、バインディング、プロファイルの4つの要素に焦点を当てます。 これらは、SAMLが使用できるコア要素です。

4.1. アサーション

まず、公式仕様で読むことができるように:

アサーションは、SAML機関によって作成された0個以上のステートメントを提供する情報のパッケージです。

アサーションデータは、次のタグの間に配置されます。

<saml:Assertion ...>
   ..
 </saml:Assertion>

SAML2.0アサーションステートメントには3つのタイプがあります

  1. 認証–特定のユーザーが特定の認証方法を使用して特定の時間に認証したことをサービスプロバイダーに通知します。
  2. 属性–ユーザーの関連属性をサービスプロバイダーに渡します。 属性は、ユーザーに関連するいくつかの情報を含むデータの名前と値のペアです。
  3. 承認–ユーザーが要求されたリソースにアクセスできるかどうかをサービスユーザーに通知します。

アサーションには、上記の要素の1つ以上を含めることができます。 これらの要素に基づいて、プロバイダーは制御アクセスの決定を実行できます。

4.2. プロトコル

SAML要素の2番目のタイプはプロトコルです。 それらは、特定の要素が要求と応答内でどのようにパックされ、消費されるべきかを説明します。 SAML 2.0は、さまざまなプロトコルを提供します。

  • アサーションクエリおよびリクエストプロトコル
  • アーティファクト解決プロトコル
  • シングルログアウトプロトコル
  • 認証要求プロトコル
  • 名前識別子管理プロトコル
  • 名前識別子マッピングプロトコル

各プロトコルは、仕様で詳しく説明されています。 したがって、ここでは詳細については説明しません。

4.3. バインディング

3番目に重要なタイプの要素はバインディングです。 それらは、SAMLメッセージのメカニズムとマッピングについて通知します。 たとえば、SAMLメッセージをSOAPエンベロープにカプセル化できます。 SAML 2.0は、いくつかのバインディングを提供します。

  • SAMLSOAPバインディング
  • リバースSOAP(PAOS)
  • バインディングHTTPリダイレクト(GET)バインディング
  • HTTPPOSTバインディング
  • HTTPアーティファクトバインディング
  • SAMLURIバインディング

4.4. プロファイル

最後になりましたが、SAMLプロファイルがあります。 プロファイルは、アサーション、バインディング、およびプロトコルがどのように連携して特定のユースケースを処理するかを表します。 仕様を読むことができます:

一般に、SAMLのプロファイルは、特定のアプリケーションでのSAMLの使用をサポートする制約や拡張機能を定義します。目標は、汎用標準で避けられない柔軟性の一部を削除することで相互運用性を強化することです。

さまざまなSAMLプロファイルがありますが、主要なプロファイルはWebブラウザSSOです。

5. 結論

この記事では、SAML2.0標準について説明しました。 そのワークフローとコアアーキテクチャについて説明しました。 要約すると、SAML標準の最も重要なユースケースはSSOメカニズムです。