Shibboleth SP - 从 Java 中读取断言属性

Posted

技术标签:

【中文标题】Shibboleth SP - 从 Java 中读取断言属性【英文标题】:Shibboleth SP - Reading assertion attributes from Java 【发布时间】:2016-12-22 18:56:36 【问题描述】:

我了解配置的属性将默认存储为环境变量,并且可以像这样访问

request.getAttribute("Shib-Identity-Provider")

我试过了,经过一番谷歌搜索后,我了解到可以通过 AJP 在 Java 中访问它们。

我需要添加前缀

<ApplicationDefaults id="default" policyId="default"
    entityID="https://idp.example.org"
    REMOTE_USER="eppn persistent-id targeted-id"
    signing="false" encryption="false" attributePrefix="AJP_">

我这样做了,但我的 Java 应用程序仍然为 null

Shib-Identity-Provider - null Shib-Session-ID - 空 Shib-Application-ID - 空

有人可以帮我弄清楚我缺少什么来使它工作吗?

【问题讨论】:

【参考方案1】:

我可以得到标题中的值。对我来说,我在标签中添加的以下行工作

<Location /login >
    AuthType Shibboleth
    ShibRequireSession On
    ShibUseHeaders On
    require valid-user
</Location>

【讨论】:

【参考方案2】:

    确保您的属性映射文件中有此字段。

    1.1 idP 也必须发送属性。

    由于您的属性前缀为“AJP_”,因此您的属性将以“AJP_attributeName”的形式出现(这也可能有所不同)

    2.1 您必须打开通常侦听 8009 的 AJP 端口并将 /secure 路径重定向到 AJP。您必须在 apache 中执行此操作才能将代理转发为 AJP。

    2.2 在 /secure 路径的 servlet/handler 中,尝试获取属性为 request.getHeader("AJP_attrName")

    (如果这不起作用,也可以尝试关注 a.reqest.getAttribute("attr") b.reqest.getAttribute("AJP_attr") c.header.getAttribute("attr") c.header.getAttribute("AJP_attr")。我告诉你试试这个,因为我很久以前就这样做了我不确定确切的方法。)

【讨论】:

我已经想通了。不过谢谢..我不打算使用标头来传递断言属性。我在阅读时不需要加上 AJP_ 前缀。我的所有其他配置都已到位。我只是错过了 apache 中的位置标记集。感谢您的回复和帮助。【参考方案3】:

我错过了下面的配置

<Location /appname>
    AuthType shibboleth
    ShibRequestSetting requireSession 1
    require valid-user
</Location>

供参考: https://wiki.surfnet.nl/display/surfconextdev/My+First+SP+-+Java

【讨论】:

用纯文本写文档的时候非常好。

以上是关于Shibboleth SP - 从 Java 中读取断言属性的主要内容,如果未能解决你的问题,请参考以下文章

为了实施 SAML,我是不是需要在主机上安装 Shibboleth SP?

Shibboleth SP 是 SAML 2.0 的实现吗?

Shibboleth SSO 和 Spring SP:由于“InResponseToField”不匹配错误而无法登录

没有可用的 MetadataProvider - shibsp::ConfigurationException

强制 Shibboleth 在身份验证后重定向到特定 URL

将 WordPress iOS 应用程序与受 Shibboleth 保护的 WordPress 配合使用