AuthnRequest 中的 SAML 请求属性

SAML Request Attributes In AuthnRequest

我有点理解基本的 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.

的一部分返回给我

您需要在 IdP 上的信任关系中将想要的属性添加到已发布的属性中。 Afaik 没有办法专门请求属性。

只是为了提供更多细节,您作为 SP 请求其他属性的时间是您将元数据发送到 IdP 时。该元数据描述了您的服务,包括 ACS 端点、您的 AuthnRequests 将使用的 public 证书、您希望合作伙伴加密的证书、您需要的属性、您的唯一实体 ID 等. 好处是,一旦您确定了您的服务需要什么,这个元数据就不必更改 - 对于任何合作伙伴。您可以将其发送给与您合作的每个人。

一旦您的合作伙伴收到此元数据,他们就会将其导入,并使用他们的身份存储库中的信息来满足您请求的属性,配置签名和加密等。完成所有操作后,他们会将他们的元数据发送给您,这包含他们的协议端点(您需要将 AuthnRequests 等发送到的地方),可以验证他们签名的证书,他们发送给您的属性的验证(这些可以根据您应该持有的对话进行更改)你的伴侣)等等

您获得此元数据,将其导入您的系统,并根据需要建立与您的应用程序的连接。