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

Shibboleth SP - Reading assertion attributes from Java

我知道默认情况下配置的属性将存储为环境变量,并且可以像

一样访问
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 应用程序中仍然出现空值

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

我错过了下面的配置

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

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

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

    1.1 idP 也必须发送属性。

  2. 由于您的属性前缀为 "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")。我告诉你试试解决这个问题是因为我很久以前就做过了,我不确定具体的方法。)

我可以获得 Headers 中的值。对我来说,我在 tag

中添加了以下行
<Location /login >
    AuthType Shibboleth
    ShibRequireSession On
    ShibUseHeaders On
    require valid-user
</Location>