2012-11-16 1 views
3

Мне кажется, что я искал высоко и низко для того, что должно быть простой конфигурацией: и приходите пустым.CAS и Shibboleth Интеграция, освобождающая основное имя (имя пользователя) в качестве атрибута в SAML

Я совершенно новичок в Shibboleth, хотя я работал с CAS немного, ничего слишком интенсивного. Я установил его (следуя руководству по адресу: https://wiki.jasig.org/display/CASUM/Shibboleth-CAS+Integration), чтобы Shibboleth перенаправлял CAS для аутентификации. Это прекрасно работает, и как только пользователь аутентифицируется, они перенаправляются через Shibboleth, и ответ SAML отправляется. Я тестирую, используя https://sp.testshib.org, и он правильно получает ответ и отображает страницу.

Что я могу не понять, так это как просто выписать простой атрибут с именем пользователя, используемым для входа в CAS. Я знаю, что Шибболет видит это (из idp-process.log), но я не могу понять, что добавить в атрибут-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!

EDIT: Я нашел это руководство по настройке, которое частично помогает, я смог передать имя как атрибут, выполнив поиск по активному каталогу, но это не подходящее долгосрочное решение, поскольку CAS может проверять более одного репозитория пользователя, и это не обязательно то же самое, что это проверит, чтобы получить его. Я просто хочу выпустить $ {requestContext.principalName} как атрибут.

Любые лучшие идеи? Может быть, статический коннектор, но я не уверен, как заставить его разрешить $ {requestContext.principalName}?

+0

Вы хотите выпустить имя пользователя в теге NameID или в атрибуте? – performanceuser

+0

В качестве атрибута предпочтительно есть несколько SP, которые в конечном итоге должны будут обслуживаться этой системой IDP, и у меня нет формата ответа для каждого из них (все еще изучается фаза, чтобы узнать, будет ли это маршрут, который мы будем go), поэтому, если они принимают SAML 2.0, то атрибут, вероятно, будет проще всего разместить. – CDerrig

ответ

4

В конце концов я смог понять это. Публикация решения здесь для всех, кто когда-либо сталкивался с этим, и теряется в болоте деталей, которые должны быть простыми.

В файле атрибуты 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> 

В атрибуте-filter.xml мне нужно, чтобы добавить следующий фильтр:

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

Измените правило политики, если вы не хотите выпускать принципала для каждого SP.

Удивительно, что что-то такое простое, похоже, не документировано нигде. Я просмотрел документы shibboleth дольше, чем это следовало принять, и, наконец, нашел ключ в сообщении группы google, которое кто-то сделал о желании изменить значение PrincipalName.

Я надеюсь, что это поможет кому-то еще!

+0

Большое спасибо за это! – drox

+0

@CDerrig, как вы могли получить принципиальное имя без соединителя данных в attribute-resolver.xml? –

Смежные вопросы