1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【IBM Application Gateway】HTTP変換機能(XSLT:Extensible Stylesheet Language Transformation)について

Posted at

はじめに

IBM Application Gatewaynでは、XSLTを使ってHTTPのRequest/Responseに対する変換が行えます。
今回は、このXSLT機能を試してみました。

  • ①バックエンドサーバーへのHTTP要求にHTTPヘッダを追加
  • ②ブラウザへのHTTP応答にHTTPヘッダーを追加

qiita (1).png

(参考)マニュアル
http_transformations/requesthttp_transformations/response

1.XSLTとは

IBM Secutity Verify Accessのガイドに日本語の解説があります。
https://www.ibm.com/docs/ja/sva/10.0.1?topic=transformations-extensible-stylesheet-language-transformation-xslt

Extensible Stylesheet Language (XSL) は、ルールを指定するために使用する言語で、Extensible Markup Language (XML) は、ルールへの入力を形成するデータに使用する言語です。XML と XSL を組み合わせることにより、ルール評価プログラムへの入力およびルール自体の両方を表現する、プラットフォームに依存しない方法が提供されます。

IBM Secutity Verify Accessと同様に、IBM Application GatewayでもHTTP 要求/ HTTP 応答を変更して、HTTPヘッダーや、Cookieの追加・変更が行えます。

2.①バックエンドサーバーへのHTTP要求にHTTPヘッダを追加

HTTP要求に対して、ヘッダー名:myuri、値:HTTPリクエストのURI を設定するときのサンプルです。

policies:

  http_transformations:
    request:

        #
        # An HTTP transformation policy, applied to all
        # resources, which will add the URI of the request to a header
        # called myuri.
        #
      - name: "AddUriToHeader"
        method: "*"
        paths:
          - "*"
        rule: |
          <?xml version="1.0" encoding="UTF-8"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

          <xsl:strip-space elements="*" />

          <xsl:variable name="varUriGlobal">
           <xsl:value-of select="//HTTPRequest/RequestLine/URI"/>
          </xsl:variable>

          <xsl:template match="/">
            <HTTPRequestChange>
              <xsl:apply-templates />
            </HTTPRequestChange>
          </xsl:template>

          <xsl:template match="//HTTPRequest/Headers">
          <xsl:choose>
            <xsl:when test="Header/@name='myuri'" />
            <xsl:otherwise>
              <Header action="add" name="myuri"><xsl:value-of select="$varUriGlobal"/></Header>
            </xsl:otherwise>
          </xsl:choose>
          </xsl:template>

          </xsl:stylesheet>

IBM Application Gatewayのトレース上も、myuriというHTTPヘッダーが追加されていました。
PD というのは、IBM Application Gatewayを指します。
赤枠がリクエストの向きになります。この図では、IBM Application Gateway (PD)からバックエンドサーバー(BackEnd)へのリクエストということがわかります。

qiita (2).png

2.②ブラウザへのHTTP応答にHTTPヘッダーを追加

HTTP応答に対して、ヘッダー名:IAG_HTTP_XFORM_RESP、値:HELLO_WORLDを設定するときのサンプルです。

policies:

  http_transformations:
    response:

        #
        # An HTTP transformation policy, applied to all
        # resources, which will add the 'IAG_HTTP_XFORM_RESP: HELLO_WORLD'
        # HTTP header to all responses.
        #
      - name: "AddResponseHeader"
        method: "*"
        paths:
          - "*"
        rule: |
          <?xml version="1.0" encoding="UTF-8"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

          <xsl:strip-space elements="*" />

          <xsl:template match="/">
            <HTTPResponseChange>
              <xsl:apply-templates />
            </HTTPResponseChange>
          </xsl:template>

          <xsl:template match="//HTTPRequest/Headers">
            <Header action="add" name="IAG_HTTP_XFORM_RESP">HELLO_WORLD</Header>
          </xsl:template>

          </xsl:stylesheet>

iag_http_xfrom_respというHTTPヘッダーが追加されていました。
赤枠がリクエストの向きになります。この図では、IBM Application Gateway (PD)からクライアント(Browser)へのリクエストということがわかります。

qiita (3).png

最後に

今回は、HTTP Transformationについて試してみました。

XSLTについては、IBM Secutity Verify Accessのガイドが参考になります。
HTTP 変換のシナリオ例

また、IBM Secutity Verify Access向けですが、Globalサポートチームが作成したサンプルソースも参考となります。
IBM-Security /isam-support

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?