はじめに
IBM Application Gatewaynでは、XSLTを使ってHTTPのRequest/Responseに対する変換が行えます。
今回は、このXSLT機能を試してみました。
- ①バックエンドサーバーへのHTTP要求にHTTPヘッダを追加
- ②ブラウザへのHTTP応答にHTTPヘッダーを追加
(参考)マニュアル
http_transformations/request、http_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)へのリクエストということがわかります。
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)へのリクエストということがわかります。
最後に
今回は、HTTP Transformationについて試してみました。
XSLTについては、IBM Secutity Verify Accessのガイドが参考になります。
HTTP 変換のシナリオ例
また、IBM Secutity Verify Access向けですが、Globalサポートチームが作成したサンプルソースも参考となります。
IBM-Security /isam-support