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

[upki-fed:01013] Shibboleth IdP 3におけるFPSP相当機能の条件記述について



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

現在、
https://meatwiki.nii.ac.jp/confluence/pages/viewpage.action?pageId=20021272
あたりを見ながら、FPSP対応の学認IdPをShibboleth 3.2.1に移行する実験をしているのですが、
conf/intercept/context-check-intercept.xml での条件の書き方に悩んでいます。

たとえば、

entityID-A: edupersonAffiliation が faculty または staff
entityID-B: edupersonAffiliation が faculty
その他: 制限なし

の条件でフィルタしたいと思った場合、とりあえず次のように書いてみたのですが、動いていそうな雰囲気です。

  <bean id="shibboleth.context-check.Condition" parent="shibboleth.Conditions.OR">
    <constructor-arg>
      <list>
        <bean id="shibboleth.context-check.Condition" parent="shibboleth.Conditions.AND">
          <constructor-arg>
            <list>
              <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidates="#{ 'entityID-A' }" />
              <bean class="net.shibboleth.idp.profile.logic.SimpleAttributePredicate"
                    p:useUnfilteredAttributes="true">
                <property name="attributeValueMap">
                  <map>
                    <entry key="eduPersonAffiliation">
                      <list>
                        <value>faculty</value>
                        <value>staff</value>
                      </list>
                    </entry>
                  </map>
                </property>
              </bean>
            </list>
          </constructor-arg>
        </bean>
        <bean id="shibboleth.context-check.Condition" parent="shibboleth.Conditions.AND">
          <constructor-arg>
            <list>
              <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidates="#{ 'entityID-B' }" />
              <bean class="net.shibboleth.idp.profile.logic.SimpleAttributePredicate"
                    p:useUnfilteredAttributes="true">
                <property name="attributeValueMap">
                  <map>
                    <entry key="eduPersonAffiliation">
                      <list>
                        <value>faculty</value>
                      </list>
                    </entry>
                  </map>
                </property>
              </bean>
            </list>
          </constructor-arg>
        </bean>
        <bean id="shibboleth.context-check.Condition" parent="shibboleth.Conditions.NOT">
          <constructor-arg>
            <list>
              <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidates="#{{ 'entityID-A', 'entityID-B' }}" />
            </list>
          </constructor-arg>
        </bean>
      </list>
    </constructor-arg>
  </bean>

この場合、「その他」を表す部分である、

        <bean id="shibboleth.context-check.Condition" parent="shibboleth.Conditions.NOT">
          <constructor-arg>
            <list>
              <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidates="#{{ 'entityID-A', 'entityID-B' }}" />
            </list>
          </constructor-arg>
        </bean>

がないとやはり動作しなかった(「その他」のSPが全部利用できなくなる)のですが、
ここの記述にも最初の条件の2つのentityIDが存在していて、
ちょっと綺麗じゃないな(後日メンテナンス時に忘れそうで怖い…)的な印象を持ちました。

これはこのように書くのがやはり適切なのでしょうか、それとももっとシンプルな書き方があるのでしょうか?

もしご存知の方、いらっしゃいましたらご教授いただけますでしょうか。

よろしくお願いいたします。


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