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

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



秋山様 宇羅様

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

情報、どうもありがとうございました。

試してみたのですが、私の目的にはTransform AttributeResolverが合っていたようです
(凝った正規表現で置換を行いたかったため)。

shibboleth2.xmlの最初のところに、

    <OutOfProcess>
        <Extensions>
            <Library path="plugins.so" fatal="true"/>
        </Extensions>
    </OutOfProcess>

を入れると利用可能となり、

</ApplicationDefaults>

が閉じる直前あたりに、

        <AttributeResolver type="Transform" source="eppn">
            <Regex match="^(.+)@(.+)$" dest="eppn2">$1&$2</Regex>
        </AttributeResolver>

のようにすれば、eppn2という環境変数に例で出した正規表現で置換した文字列が入るようでした。

mod_rewriteのundocumentedな振る舞いに綱渡り的に依存した元々の動作より、
Shibboleth SPの文書化された機能で実現できるこちらの方が、
ずっと安心して利用可能です。

ということで、ばっちり問題の解決が出来ました。ありがとうございました。

細川

On 2016/11/29 21:20, Toyokazu Akiyama wrote:
細川様

京都産業大学の秋山です。

あとは、これまた古い話ですが、Shibboleth SPにあるTransform AttributeResolverなる機能を活用すれば属性を正規表現で変換できるので、何らかの形で解決できるような気がします。

https://wiki.shibboleth.net/confluence/pages/viewpage.action?pageId=4358435

ご参考まで。

2016年11月29日(火) 20:47 Tatsumi Hosokawa <xxxxxxxx@xxxxxxxxxxxxxx <mailto:xxxxxxxx@xxxxxxxxxxxxxx>>:

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

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

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

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

    xxxxxxxx@xxxxxxxxxx <mailto:xxxxxxxx@xxxxxxxxxx>

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

    たとえば該当のシステムでは"hosokawa&keio.ac.jp <http://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 <mailto:xxxxxxxx@xxxxxxxxxxxxxx>
    Tel. 03-5427-1685  Fax. 03-5427-1722



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