SAMLAssertion ポリシー

概要

  • 受信認証と認可: SAML Assertion ポリシーの検証
    SAML ポリシーを使用すると、受信 SOAP リクエストに追加された SAML アサーションを API プロキシで検証できます。SAML ポリシーは、デジタル署名付きの SAML アサーションを含む受信メッセージを検証します。無効な場合はメッセージを拒否し、他のポリシーまたはバックエンド サービス自体がアサーション情報をさらに検証できるように変数を設定します。
  • 送信トークンの生成: SAML Assertion ポリシーの生成
    SAML ポリシーを使用すると、API プロキシで SAML アサーションを送信 XML リクエストに追加できます。これらのアサーションを使用すると、認証と認可用の追加のセキュリティ処理をバックエンド サービスに適用できます。

サンプル

SAML アサーションの生成

    <GenerateSAMLAssertion name="SAML" ignoreContentType="false">
      <CanonicalizationAlgorithm />
      <Issuer ref="reference">Issuer name</Issuer>
      <KeyStore>
        <Name ref="reference">keystorename</Name>
        <Alias ref="reference">alias</Alias>
      </KeyStore>
      <OutputVariable>
        <FlowVariable>assertion.content</FlowVariable>
        <Message name="request">
          <Namespaces>
            <Namespace prefix="test">http://www.example.com/test</Namespace>
          </Namespaces>
          <XPath>/envelope/header</XPath>
        </Message>
      </OutputVariable>
      <SignatureAlgorithm />
      <Subject ref="reference">Subject name</Subject>
      <Template ignoreUnresolvedVariables="false">
        <!-- A lot of XML goes here, in CDATA, with {} around
             each variable -->
      </Template>
    </GenerateSAMLAssertion>
    

SAML アサーションの生成

SAML アサーションの検証

    <ValidateSAMLAssertion name="SAML" ignoreContentType="false">
      <Source name="request">
        <Namespaces>
          <Namespace prefix='soap'>http://schemas.xmlsoap.org/soap/envelope/</Namespace>
          <Namespace prefix='wsse'>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd</Namespace>
          <Namespace prefix='saml'>urn:oasis:names:tc:SAML:2.0:assertion</Namespace>
        </Namespaces>
        <XPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</XPath>
      </Source>
      <TrustStore>TrustStoreName</TrustStore>
      <RemoveAssertion>false</RemoveAssertion>
    </ValidateSAMLAssertion>
    

SAML アサーションの検証


要素リファレンス

SAML アサーションの生成

フィールド名 説明
name 属性 ポリシー インスタンスの名前。名前は、組織内で一意にする必要があります。名前で使用できる文字は A-Z0-9._\-$ % だけです。ただし、管理 UI では、英数字以外の文字を自動的に削除するなど、追加の制限が適用されます。
ignoreContentType 属性 ブール値。true または false に設定できます。デフォルトでは、メッセージのコンテンツ タイプが XML Content-Type でない場合、アサーションは生成されません。true に設定すると、Content-type に関係なく、メッセージは XML として扱われます。
Issuer
ID プロバイダの一意の識別子。任意の ref 属性がある場合、指定された変数に基づいて、ランタイムに発行側の値が割り当てられます。任意の ref 属性がない場合、発行側の値が使用されます。
KeyStore
SAML アサーションのデジタル署名に使用する秘密鍵とそのエイリアスを含む KeyStore の名前。
OutputVariable
FlowVariable
Message ポリシーのターゲット。有効な値は messagerequestresponse です。message に設定すると、条件が評価され、ポリシーの追加ポイントに応じてメッセージ オブジェクトが取得されます。リクエスト フローに追加されている場合、ポリシーはリクエストに対して message を解決します。レスポンス フローに追加されている場合は、レスポンスに対して message を解決します。
XPath ポリシーが SAML アサーションを追加する送信 XML ドキュメントの要素を表す XPath 式。
SignatureAlgorithm SHA1 または SHA256
Subject
SAML アサーションのサブジェクトの一意の識別子。任意の ref 属性がある場合、指定された変数に基づいて、ランタイムにサブジェクトの値が割り当てられます。任意の ref 属性がない場合、サブジェクトの値が使用されます。
Template
存在する場合、このテンプレートを実行すると、アサーションが生成されます。{} 付きの場所は対応する変数に置き換え、その結果にデジタル署名を行います。テンプレートは AssignMessage ポリシールールの後に処理されます。Assign Message ポリシーをご覧ください。

SAML アサーションの検証

フィールド名 説明
name 属性
ポリシー インスタンスの名前。名前は、組織内で一意にする必要があります。名前で使用できる文字は A-Z0-9._\-$ % だけです。ただし、管理 UI では、英数字以外の文字を自動的に削除するなど、追加の制限が適用されます。
ignoreContentType 属性 ブール値。true または false に設定できます。デフォルトでは、メッセージのコンテンツ タイプが XML Content-Type でない場合、アサーションは生成されません。true に設定すると、Content-type に関係なく、メッセージは XML として扱われます。
Source ポリシーのターゲット。有効な値は messagerequestresponse です。message に設定すると、条件が評価され、ポリシーの追加ポイントに応じてメッセージ オブジェクトが取得されます。リクエスト フローに追加されている場合、ポリシーはリクエストに対して message を解決します。レスポンス フローに追加されている場合は、レスポンスに対して message を解決します。
XPath
Source の子。ポリシーが SAML アサーションを抽出する受信 XML ドキュメントの要素を表す XPath 式。
TrustStore
信頼された X.509 証明書を含むトラストストアの名前。この証明書は、SAML アサーションのデジタル署名の検証に使用されます。
RemoveAssertion
ブール値。true または false に設定できます。true の場合、メッセージがバックエンド サービスに転送される前に、SAML アサーションがリクエスト メッセージから削除されます。

使用上の注意

SAML(Security Assertion Markup Language)は、アプリケーション間で認証と認可に使用する情報を XML 形式で交換するためのデータ形式とプロトコルを定義しています。

「セキュリティ アサーション」は、アプリ、アプリのユーザー、トランザクションの他の参加者の属性を表す信頼できるトークンです。セキュリティ アサーションは、次の 2 種類のエンティティによって管理されます。

  • ID プロバイダ: 参加者の代わりにセキュリティ アサーションを生成します。
  • サービス プロバイダ: ID プロバイダとの信頼関係により、セキュリティ アサーションを検証します。

API プラットフォームは、ID プロバイダまたはサービス プロバイダとして機能します。ID プロバイダとしては、アサーションを生成してリクエスト メッセージに追加し、バックエンド サービスで処理できるようにします。サービス プロバイダとしては、受信リクエスト メッセージのアサーションを検証します。

SAML ポリシータイプは、SAML コア仕様のバージョン 2.0 と WS-Security SAML Token Profile 仕様のバージョン 1.0 に準拠している SAML アサーションをサポートします。

SAML アサーションの生成

ポリシーの処理:

  1. メッセージが XML でない場合、IgnoreContentType に true を設定せず、エラーを発生させます。
  2. 「Template」が設定されている場合は、AssignMessage ポリシーの説明にあるように、テンプレートを処理します。変数が指定されず、IgnoreUnresolvedVariables も設定されていない場合は、エラーを発生させます。
  3. 「Template」が設定されていない場合には、Subject と Issuer パラメータの値または参照を含むアサーションを生成します。
  4. 指定されたキーを使用して、アサーションに署名します。
  5. 指定された XPath でアサーションをメッセージに追加します。

SAML アサーションの検証

ポリシーの処理:

  1. 受信メッセージを確認し、コンテンツ タイプが text/(.*+)?xml または application/(.*+)?xml 形式に一致しているかどうか確認し、リクエストのメディアタイプが XML かどうかを判断します。メディアタイプが XML でない場合、または「IgnoreContentType」が設定されていない場合、エラーを発生させます。
  2. XML を解析します。解析に失敗した場合、エラーを発生させます。
  3. 上記の TrustStore と ValidateSigner の値を使用して、XML のデジタル署名を検証します。検証に失敗した場合、エラーを発生させます。
  4. 現在のタイムスタンプ(存在する場合)をアサーションの NotBefore 要素や NotOnOrAfter 要素と比較します(SAML コア仕様、第 2.5.1 項を参照)。
  5. 「Conditions」を処理する追加ルールを実行します(SAML コア仕様、第 2.5.1.1 項を参照)。

ポリシーの処理でエラーが発生しなければ、プロキシのデベロッパーは次のことを確認できます。

  • アサーションのデジタル署名が有効で、信頼できる CA によって署名されている。
  • アサーションの有効期間内である。
  • アサーションのサブジェクトと発行者が抽出され、フロー変数に設定される。サブジェクト名の検証やターゲット システムでの検証など、これらの値を追加の認証で使用する場合は、別のポリシーを使用します。

ExtractVariables などのポリシーを使用すると、アサーションの加工前の XML を解析し、より複雑な検証を行うことができます。


フロー変数

SAML アサーションには多くの情報を指定できます。SAML アサーション自体が XML で、ExtractVariables ポリシーや他のメカニズムで解析し、より複雑な検証を行うことができます。

変数 説明
saml.id SAML アサーションの ID
saml.issuer アサーションの「Issuer」。ネイティブの XML から文字列に変換されます。
saml.subject アサーションの「Subject」。ネイティブの XML から文字列に変換されます。
saml.valid 検証チェックの結果に応じて true または false を返します。
saml.issueInstant IssueInstant
saml.subjectFormat サブジェクトの形式
saml.scmethod サブジェクトの確認方法
saml.scdaddress サブジェクトの確認データのアドレス
saml.scdinresponse レスポンスでのサブジェクト確認データ
saml.scdrcpt サブジェクト確認データの受信者
saml.authnSnooa AuthnStatement SessionNotOnOrAfter
saml.authnContextClassRef AuthnStatement AuthnContextClassRef
saml.authnInstant AuthnStatement AuthInstant
saml.authnSessionIndex AuthnStatement セッション インデックス

エラー リファレンス

SAML Assertion ポリシーに固有のエラーコードはありません。

関連トピック

変数の抽出: Extract Variables ポリシー