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];
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];