我需要一些关于我的SSO实施的指导。 我已经成功完成了几个SAML2实现,但是在这个方面有一些缺失: - 我认为它很小但我不确定我缺少什么,而且我在代理端的日志中没有看到太多信息: - / < / p>
所以:
问题是当我从供应商那里得到响应时,他们会被CDCSERVLET重定向到OpenAm的登录页面。我不知道为什么他们没有经过身份验证。
回复:
<Response ID="_FAD290A87DB14BC4A8A8F435DEBDEBB3" Version="2.0" IssueInstant="2015-12-31T20:59:34.1012911Z" Destination="https://sso.com:443/sp/Consumer/metaAlias/xxx-test/sp" xmlns="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">xxx</Issuer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#_FAD290A87DB14BC4A8A8F435DEBDEBB3">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>HPTUTyPjegeyjDW5lmMb8ggbwas=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>4Ek0xpDPj5Q==</SignatureValue>
</Signature>
<Status>
<StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</Status>
<Assertion Version="2.0" ID="_BCA1E13E205E4CDCB7AB903E90606DBD" IssueInstant="2015-12-31T20:59:34.1012911Z" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>xxx</Issuer>
<Subject>
<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified">100</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2015-12-31T21:04:34.1948917Z" Recipient="https://sso.com:443/sp/Consumer/metaAlias/xxx-test/sp"/>
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2015-12-31T20:54:34.1012911Z" NotOnOrAfter="2015-12-31T21:04:34.1012911Z">
<AudienceRestriction>
<Audience>xxx-test:saml2</Audience>
</AudienceRestriction>
</Conditions>
<AuthnStatement AuthnInstant="2015-12-31T20:59:34.1012911Z">
<SubjectLocality Address="000.0.0.000"/>
<AuthnContext>
<AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
<AttributeStatement>
<Attribute Name="AIN">
<AttributeValue xsi:type="xsd:string">100</AttributeValue>
</Attribute>
</AttributeStatement>
</Assertion>
我在该断言中注意到的是:
在我身边的SP,我确保:
所有这一切都应该是我的好,我不明白为什么客户端被重定向到OpenAM的登录页面
任何帮助都会很棒!
谢谢!
编辑:
所以,我让供应商修改了断言以发送<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">xxxx</NameID>
我在这个领域添加了一个用户,并在我的SP配置中将其用作临时用户,但它导致了同样的问题!!
当nameid-format设置为未指定时,我在领域中创建了100个用户作为主题,但它仍然无效: - /
编辑3:这里有关于会议的一些信息:
<SessionNotification vers="1.0" notid="117627">
<Session sid="AQIC5wM2LY4SfcxfxdL6szA_aGlQEkFtHROifZHX_VpqHag.*AAJTSQACMDIAAlNLABM3OTI1OTk2NjE0MDA1MjA2MTcw*" stype="user" cid="id=user-test,ou=user,dc=openam,dc=forgerock,dc=org" cdomain="dc=openam,dc=forgerock,dc=org" maxtime="60" maxidle="30" maxcaching="5" timeidle="1800" timeleft="1529" state="destroyed">
<Property name="CharSet" value="UTF-8"></Property>
<Property name="UserId" value="user-test"></Property>
<Property name="FullLoginURL" value="/sp/UI/Login?ForceAuthn=false&MinorVersion=0&RequestID=see601a9040131cc9c9d09947cf1addab3e4df292&refererservlet=https%3A%2F%2Fs-----6ForceAuthn%3Dfalse%26ProviderID%3Dhttps%253A%252F%252Fstagingcng.inspirus365.com%253A443%252F%253FRealm%253D%25252F%26MinorVersion%3D0%26Federate%3Dfalse%26IssueInstant%3D2016-01-12T21%253A30%253A22Z%26MajorVersion%3D1&IssueInstant=2016-01-12T21%3A30%3A22Z&MajorVersion=1"></Property>
<Property name="successURL" value="/sp/console"></Property>
<Property name="cookieSupport" value="true"></Property>
<Property name="AuthLevel" value="0"></Property>
<Property name="SessionHandle" value="shandle:AQIC5wM2LY4SfcwZfnMFJVMF0olMGhmq-Nmqw_BMxoVv4AA.*AAJTSQACMDIAAlNLABM3OTI1OTk2NjE0MDA1MjA2MTcw*"></Property>
<Property name="UserToken" value="user-test"></Property>
<Property name="loginURL" value="/sp/UI/Login"></Property>
<Property name="Principals" value="user-test"></Property>
<Property name="Service" value="ldapService"></Property>
<Property name="sun.am.UniversalIdentifier" value="id=user-test,ou=user,dc=openam,dc=forgerock,dc=org"></Property>
<Property name="amlbcookie" value="01"></Property>
<Property name="Organization" value="dc=openam,dc=forgerock,dc=org"></Property>
<Property name="Locale" value="en_US"></Property>
<Property name="HostName" value="205."></Property>
<Property name="AuthType" value="DataStore"></Property>
<Property name="Host" value="205."></Property>
<Property name="UserProfile" value="Ignore"></Property>
<Property name="clientType" value="genericHTML"></Property>
<Property name="AMCtxId" value="a0749ff708bff14202"></Property>
<Property name="SessionTimedOut" value="1452636294"></Property>
<Property name="authInstant" value="2016-01-12T21:30:33Z"></Property>
<Property name="Principal" value="id=user-test,ou=user,dc=openam,dc=forgerock,dc=org"></Property>
</Session>
令我印象深刻的是<Property name="AuthType" value="DataStore"></Property>
(我有来自其他供应商的联盟:0)
我确信问题是因为用户无法通过OpenAM进行身份验证。
答案 0 :(得分:0)
我假设在服务提供商端(OpenAM)关闭了自动进行,并且您使用NameID作为用户ID。
收到断言后,SP帐户映射器将尝试在定义SP的领域的数据存储中查找具有该用户ID的用户。您可以通过访问Access Control&gt;找到将哪个LDAP属性映射到用户ID。你的REALM&gt;数据存储&gt;你的DATASTORE。查找名为&#34; LDAP用户搜索属性&#34;。
的属性在这种特殊情况下,NameID值为&#34; 100&#34;因此,Account Mapper将尝试使用该用户ID在您的数据存储中查找用户。例如,如果您的&#34; LDAP用户搜索属性&#34;设置为&#34; uid&#34;,帐户映射器将尝试在您的目录中找到一个用户&#34; uid&#34;等于&#34; 100&#34;。
所以我的假设是,Account Mapper无法将传入的断言映射到有效用户,并且它会将您带到OpenAM的登录页面。
希望这有帮助。
答案 1 :(得分:0)
我想通了......原来一切都设置正确,但我们的合作伙伴是将断言发布到中继/目标网址而不是消费者网址.....