3

シンプルな構成であるべきものを高低で検索したような気がします。

私は Shibboleth をまったく初めて使用しますが、CAS で少し作業したことがありますが、それほど熱心ではありません。Shibboleth が認証のために CAS にリダイレクトされるように( https://wiki.jasig.org/display/CASUM/Shibboleth-CAS+Integrationのガイドに従って) セットアップしました。これは正常に機能し、ユーザーが認証されると、Shibboleth を介してリダイレクトされ、SAML 応答が送信されます。https://sp.testshib.orgを使用してテストしていますが、適切に応答を受け取り、ページを表示しています。

私が理解できないように見えるのは、CASへのログインに使用されるユーザー名で単純な属性を解放する方法です。Shibboleth がそれを (idp-process.log から) 見ていることは知っていますが、これを解放するために attribute-resolver.xml と attribute-filter.xml に何を入れればよいかわかりません。

現在の SAML 応答は次のようになります。

<?xml version="1.0" encoding="UTF-8"?><saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_da56752846e00c2693ece2c486d7c870" IssueInstant="2012-11-16T14:08:07.570Z" Version="2.0">
   <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://<idpurl>/idp/shibboleth</saml2:Issuer>
   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <ds:SignedInfo>
         <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
         <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
         <ds:Reference URI="#_da56752846e00c2693ece2c486d7c870">
            <ds:Transforms>
               <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
               <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>7OHKEiEQ0ZcPDcnt4B8PIGoLEfw=</ds:DigestValue>
         </ds:Reference>
      </ds:SignedInfo>
      <ds:SignatureValue>S3FZI+KpNf8wUYWMA96ccAj0Y5ebojB1xKHlixHWNEr4voqHOGSpBzxdui0IVtUwLEzj4RrDFdYarJaZj6ltzFV4hfNx5bN88zYQG6w9BBP9UybG+81Wrhii2O31AmRz2Y6XIqa72CeN2R4DKo70awn6FXIPLAcEKs+7dAG2lQ87VS3Wv126DghE/eGcMLW6+z9a3MxXtUFSmWYosaIbNREJn4mGO/uGzD27eeo6SNmvBx/BgVh7T2cOIbtD8b9OOZT8Urt0kZ2nsoCZHgp1T0V6ZgnE2TDvPTInrxzC5c4S+YOYZlB0ijMI6pk+PpJGshe7MVUcEO34Nn0I3i0OUw==</ds:SignatureValue>
      <ds:KeyInfo>
         <ds:X509Data>
            <ds:X509Certificate><!--Valid Certificate--></ds:X509Certificate>
         </ds:X509Data>
      </ds:KeyInfo>
   </ds:Signature>
   <saml2:Subject>
      <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" NameQualifier="https://<idpurl>/idp/shibboleth" SPNameQualifier="https://sp.testshib.org/shibboleth-sp">_4b1a2780b2ce3db36ea7e7f6192b7108</saml2:NameID>
      <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
         <saml2:SubjectConfirmationData Address="<valid ip address>" InResponseTo="_aa4e23dd783eddb1be18ad224c26e7cf" NotOnOrAfter="2012-11-16T14:13:07.570Z" Recipient="https://sp.testshib.org/Shibboleth.sso/SAML2/POST"/>
      </saml2:SubjectConfirmation>
   </saml2:Subject>
   <saml2:Conditions NotBefore="2012-11-16T14:08:07.570Z" NotOnOrAfter="2012-11-16T14:13:07.570Z">
      <saml2:AudienceRestriction>
         <saml2:Audience>https://sp.testshib.org/shibboleth-sp</saml2:Audience>
      </saml2:AudienceRestriction>
   </saml2:Conditions>
   <saml2:AuthnStatement AuthnInstant="2012-11-16T14:08:07.554Z" SessionIndex="00568a153d3cccf9c17abf2c77a043ed8b74a74fe5e2c61000590269aa87f99a">
      <saml2:SubjectLocality Address="<valid ip address>"/>
      <saml2:AuthnContext>
         <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml2:AuthnContextClassRef>
      </saml2:AuthnContext>
   </saml2:AuthnStatement>
</saml2:Assertion> 

この設定方法の例が必要です。wiki.shibboleth.net のすべてのドキュメントを読みましたが、まだ入手できないようです。

助けてくれてありがとう、私はそれが単なる構成の問題であることを知っていますが、それは私の脳を愚かに感じさせており、TestShib よりも強力なものと統合することさえ試みていません!

編集: 部分的に役立つこのセットアップ ガイドを見つけました。アクティブ ディレクトリを検索して名前を属性として渡すことができましたが、CAS は複数のユーザー リポジトリをチェックできるため、これは適切な長期的な解決策ではありません。 、これが取得するためにチェックするものと必ずしも同じではありません。${requestContext.principalName} を属性として解放したいだけです。

より良いアイデアはありますか?静的コネクタかもしれませんが、${requestContext.principalName} を解決する方法がわかりませんか?

4

1 に答える 1

4

結局、私はそれを理解することができました。これに出くわし、単純であるべき詳細の沼に迷い込んだ他の人のために、ここに解決策を投稿してください。

Shibbolethのattribute-resolver.xmlファイルに、次のリゾルバーを追加する必要がありました。

<resolver:AttributeDefinition id="principal" xsi:type="PrincipalName" xmlns="urn:mace:shibboleth:2.0:resolver:ad">

    <resolver:AttributeEncoder
        xsi:type="SAML1String"
        xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
        name="urn:mace:dir:attribute-def:principal" />

    <resolver:AttributeEncoder
        xsi:type="SAML2String"
        xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
        name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
        friendlyName="principal" />

</resolver:AttributeDefinition>

attribute-filter.xmlで、次のフィルターを追加する必要がありました。

    <AttributeFilterPolicy id="releaseBasicAttributesToAnyone">
        <PolicyRequirementRule xsi:type="basic:ANY"/>
        <AttributeRule attributeID="principal">
                <PermitValueRule xsi:type="basic:ANY" />
        </AttributeRule>
    </AttributeFilterPolicy>

すべてのSPにプリンシパルをリリースしたくない場合は、ポリシー要件ルールを変更します。

この単純なものがどこにも明確に文書化されていないように見えるのは驚くべきことです。私はこれが必要だったよりもずっと長い間シボレスの文書を調べました、そして最終的に誰かがPrincipalNameの値を変更したいと思ったことについて作ったグーグルグループの投稿で手がかりを見つけました。

これが他の誰かに役立つことを願っています!

于 2012-11-23T22:02:09.343 に答える