我理解基本的SAML身份验证应该如何工作:
SP的用户请求资源
SP向IDP发送身份验证请求
IDP验证用户并发回一些userId
SP通过userId发送属性查询到IDP以获取更多详细信息
IDP发回属性
SP提供用户资源
我的问题是,你能绕过AttributeQuery吗?当我向我的测试Gluu / Shibboleth服务器发出SAML 2.0请求时,我会返回givenName
(名字)和sn
(姓氏)。 无论如何我可以在AuthnRequest中申请inum
用户ID和电子邮件吗?
我的要求非常简单:
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="MyPrefix1457456412304" Version="2.0" IssueInstant="2016-03-08T17:00:12Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST">
<saml:Issuer>me.com</saml:Issuer>
</samlp:AuthnRequest>
请求我回来是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_bff09cf745ea5722aac3f3ec57c0ecf3" IssueInstant="2016-03-08T17:01:06.140Z" Version="2.0">
<saml2:Issuer ....
<saml2:AttributeStatement>
<saml2:Attribute FriendlyName="sn" Name="urn:oid:2.5.4.4" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">User</saml2:AttributeValue>
</saml2:Attribute>
<saml2:Attribute FriendlyName="givenName" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Admin</saml2:AttributeValue>
</saml2:Attribute>
</saml2:AttributeStatement>
</saml2:Assertion>
我阅读了规范的相关部分,似乎说服务器可以回馈它想要的任何东西(以及它想要多少属性)? 同样,我的问题是我是否可以强制SAML Gluu / Shibboleth服务器将特定属性作为AuthnRequest的一部分给予我。
答案 0 :(得分:4)
您需要将所需属性添加到IdP上的信任关系中的已发布属性。 Afaik没有办法专门请求属性。
答案 1 :(得分:4)
只是为了提供更多详细信息,您可以在SP将元数据发送到IdP时请求其他属性。该元数据描述了您的服务,包括ACS端点,您的AuthnRequests将使用的公共证书,您希望合作伙伴加密的证书,您需要的属性,您的唯一实体ID等。一旦你确定了你的服务需求,这个元数据就不必改变 - 对于任何合作伙伴。您可以将它发送给与您合作的每个人。
一旦您的合作伙伴收到此元数据,他们就会导入该元数据,并使用其身份存储库中的信息来完成您请求的属性,配置签名和加密等。一切完成后,他们会将元数据发送给您,其中包含他们的协议端点(您需要向其发送AuthnRequests等),可以验证其签名的证书,验证他们发送给您的属性(这些可以根据您与合作伙伴应该持有的对话进行更改)等等。
您获取此元数据,并将其导入您的系统,并根据需要构建与您的应用的连接。