从 shibboleth SP 中检索自定义属性(最佳实践)

Retrieve custom attributes from shibboleth SP (best practices)

我有一个 shibboleth 服务提供商,带有 Apache httpd 并且 id 被发送给我的属性。

所以,我能够从 https://mysp/Shibboleth/Session 检索自定义属性,我所需要的只是从前端 (ReactJs) 发送一个请求到这 link 并获取所有属性。

现在,我们将进入生产环境,但不建议将这种从会话中检索属性的方式用于生产环境。

那么您知道一种方法来检索经过身份验证的用户的属性并将数据转发到前端应用程序吗?

提前致谢

您无法直接从 client-side 访问该属性。必须有一些 server-side 代码。请参阅:How to access Shibboleth SP Attributes in AngularJS Application 与 AngularJS 的类似请求。

Shibboleth SP 将属性公开为 server-variables,并且只能从 server-side 代码访问,请参阅:Shibboleth Service Provider 3.x Attribute Access (Also, the deprecated but still in wide-deployment NativeSPAttributeAccess for SP v2.x)。

您还可以允许 Shibboleth 通过 Apache 配置中的 ShibUseHeaders On 使用 HTTP 请求 headers 公开属性数据。

如果您的后端是 Node.js,您可能会考虑 其他 而不是 Shibboleth 作为您的 SAML 服务提供商,即 saml2-js.

在我搜索并获得@Kellen Murphy 的帮助后,防止欺骗的最佳解决方案是使用环境变量。

例如,我想向我的应用程序发送 USERNAME 属性。

所以,我创建了一个 php 页面,可以从 header

中读取 session 数据
<html>
 <head>
  <title>Session data</title>
 </head>
 <body>
<?php
print_r($_SERVER["HTTP_X_USERNAME"]);
?>
 </body>
</html>

然后我用

启动了 php 页面

php -S localhost:9000

然后我将 env 变量作为 header 变量传递

    RequestHeader set X-USERNAME      %{USERNAME}e
    ProxyPass /Session http://localhost:9000
    ProxyPassReverse  /Session http://localhost:9000

现在我可以通过攻击页面来检索我的属性了: https://example.com/Session