Мне кажется, что я искал везде, где должна быть простая конфигурация: и нашел пустой.
Я совершенно новичок в Shibboleth, хотя я немного работал с CAS, ничего особенного. Я его настроил (следуя руководству по адресу: https://wiki.jasig.org/display/CASUM/Shibboleth-CAS+Integration), чтобы Shibboleth перенаправлял на CAS для аутентификации. Это работает нормально, и как только пользователь аутентифицируется, он перенаправляется через 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}?