我觉得我已经搜索了一个简单配置的高低,并且空了。
我对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}?
答案 0 :(得分: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,请更改您的策略要求规则。
令人惊讶的是,这个简单的东西似乎没有在任何地方清楚地记录下来。我查看了shibboleth文件的时间比应该采用的时间更长,最后在谷歌小组发布了一篇关于想要改变PrincipalName值的帖子中的线索。
我希望这有助于其他人!