mod_auth_mellonで値を引き渡せない

構成

  • SP:mod_auth_mellon (with Apache HTTP Server)
  • IdP:AzureAD
  • アプリ:Tomcat

実現したいこと

  • SAML認証を行い、Tomcatへのアクセス制御を行う。
  • AzureADのキー(仮にemailとする)値を、Tomcatに渡したい。
  • Tomcatには、リクエストヘッダーにUSERNAMEというキー名で値を引き渡したい。

失敗例

mod_auth_mellonのマニュアルを参照した。
mod_auth_mellon User Guide
そこには、SAMLから受け取った値は、デフォルトでは "MELLON_" + "定義した名前"で取得できるとのこと。
なお、記述っぷりを参考にしたい場合は、GitHub側を見れば"MELLON_"部分の変え方も含め、readmeに綺麗に記載してくれている。
github.com
よって、以下の様に書いていたが、値を受け取れなかった。

(中略)
    RequestHeader set USERNAME %{MELLON_email}e

対応方法

(もしかしたら最適解でないのかもしれないが、)以下で対応できた。

(中略)
    RequestHeader set USERNAME %{MELLON_http://schemas.microsoft.com/identity/claims/email}e
補足解説
  • :や//はエスケープした記述をしなくて良い
  • %{キー名}eは、mod_auth_mellonではなく、mod_headersの文法である

発見方法

mellon_diagnoticsやMellonSamlResponseDump、mod_dumpioなど色々試したが、
そもそもログを出力させれなかったり、欲しい情報を得ることができなかった。
すると、元々FireFoxプラグインで今はChromeにも提供されているsaml-tracerという拡張機能を見つけれた。
chrome.google.com
拡張機能を用いることでSAML通信の中身を見ることに成功した。
結果、以下の様な値が返却されていることが確認できた。

(中略)
<AttributeStatement>
  <AttributeStatement>
    <Attribute Name="http://schemas.microsoft.com/identity/claims/email">
      <AttributeValue>hoge1@hoge.com</AttributeValue>
(以下略)

省略して記載する方法があるかもしれないが、このまま記載することで無事値取得に成功した。