Shibboleth return 用户名作为 HTTP Header 而不是 SAML 属性

Shibboleth return username as HTTP Header instead of SAML attribute

Shibboleth IDP 和 SP 谈得很好,我需要的数据在 SAML 中。

允许 shibboleth return HTTP Header 包含我需要的信息需要什么配置(是的,我知道这是个坏主意,但别无选择)。

我是 运行 IIS 上的 SP 2.6,需要一个 HTTP Header 以及 shibboleth3 IDP 响应中的用户名。

这是我为 attribute-map.xml

尝试过的
<Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" id="netId" nameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>

它在 SAML

中为我提供了这些数据
 <saml2:AttributeStatement>
        <saml2:Attribute FriendlyName="eduPersonPrincipalName"
                         Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
                         NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
            <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                  xsi:type="xsd:string">me@school.edu</saml2:AttributeValue>
        </saml2:Attribute>
    </saml2:AttributeStatement>

由于我正在使用的软件,我需要 HTTP Header 中的用户名。

您不能让身份提供者发布 HTTP header。那不是 SAML Web 浏览器 SSO 配置文件。

你已经有了你正在谈论的中间件,它是 Shibboleth 服务提供者,如果你的 attribute-map.xml 文件是正确的,你将能够从你的应用程序访问属性逻辑作为 env 变量或 http headers 描述 here

属性如何映射到 HTTP header 的示例如下:

假设你

  • 从 IdP 释放 SAML 名称为 urn:oid:1.3.6.1.4.1.5923.1.1.1.6 的属性,并且

  • 在您的 SP attribute-map.xml 中,您有一个属性解码器,例如:

<Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" id="netId" nameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>

考虑到

When using headers, the main difference is that instead of using the names defined via the mapping process, the application must prefix them with "HTTP_", and in most tools upcase the rest of the name as well.

HTTP header 最终会 HTTP_NETID

关于如何读取 header 值,如 this thread

中所述

To iterate through all that are passed:

foreach (string key in Request.ServerVariables.AllKeys)

To reference a specific value:

value = Request.ServerVariables[key];