[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[upki-fed:01099] Shibboleth SPから得た属性値の環境変数を、アプリに渡す前に手を加えるには?



度々あまり汎用性のない質問ばかりで申し訳ありません。

慶應義塾ITC本部の細川です。

実は、Shibboleth SP化したいアプリが、商用のものでアプリ自体に手を加えることが困難で、
なおかつユーザIDとして利用したい文字列が、アプリで利用できない文字を含んでいる、
というケースが生じています。

たとえば問題を簡単化するために、eppnとして、

xxxxxxxx@xxxxxxxxxx

という値があったとして、この「@」をユーザIDとして利用することは出来ない、どうしよう、
というようなニュアンスです。

たとえば該当のシステムでは"hosokawa&keio.ac.jp"と、@を&に置換すれば、
ユーザ名として受け付けられると仮定した場合、どのような方法が考えられるでしょうか?

実験はApache 2.2とShibboleth SP 2.6で行いました。

まずはApacheのSetEnvIfを利用する方法を考えたのですが、これはShibboleth SP由来の
環境変数を操作することはできなさそうでした。

次に、同じくApacheのmod_rewriteを用いて考えてみたのですが、これも通常の
Shibboleth SP由来の環境変数にはアクセスできませんでした。ただし、一つ例外があって、
REMOTE_USER環境変数
(shibboleth2.xmlのApplicationDefaults/@REMOTE_USERに最初に指定された属性が入りますよね)
は、mod_rewriteで操作できるようです。

なので、該当するパラメータをApplicationDefaults/@REMOTE_USERの最初に指定し
(ここではeppnと仮定しましょう)、
.htaccessで次のように指定してみました。

なお、mod_rewriteのマニュアルにはREMOTE_USERに対しては%{LA-U:REMOTE_USER}で参照しろ、
と書いてあるのですが、少なくともShibboleth SP由来のREMOTE_USERに関しては、
%{REMOTE_USER}でのみ参照できるようでした。

RewriteEngine on
RewriteCond %{REMOTE_USER} ^(.*)@(.*)$
RewriteRule .* - [E=AJP_userid:%2&%1]

これで、なんとか目的は達成できたとは思うのですが、いかんせん綱渡り感が否めません。
他にもっといい方法がある、というような方がいらっしゃいましたら、
ぜひ、アドバイスを頂けたらと思います。

よろしくお願いします。

--
慶應義塾ITC本部  細川達己  xxxxxxxx@xxxxxxxxxxxxxx
Tel. 03-5427-1685  Fax. 03-5427-1722