我有一个带有 Apache httpd 的 shibboleth服务提供商,并且ID已发送给我属性。
因此,我能够从https://mysp/Shibboleth/Session检索自定义属性,我所需要的只是从前端( ReactJs )发送请求到此链接并获取所有属性。
现在,我们要进入生产环境,但是对于生产环境不建议使用这种从会话中检索属性的方法。
那么您知道一种方法来检索经过身份验证的用户的属性并将数据转发到前端应用程序吗?
提前谢谢
答案 0 :(得分:1)
您不能直接从客户端访问该属性。必须有一些服务器端代码。有关AngularJS的类似请求,请参见:How to access Shibboleth SP Attributes in AngularJS Application。
Shibboleth SP将属性公开为服务器变量,并且只能从服务器端代码访问,请参阅:Shibboleth Service Provider 3.x Attribute Access(也已弃用,但仍在广泛部署NativeSPAttributeAccess for SP v2.x中)。 / p>
您还可以允许Shibboleth通过HTTP请求标头通过Apache配置中的ShibUseHeaders On
公开属性数据。
如果后端是Node.js,则可以考虑将Shibboleth以外的其他东西作为您的SAML服务提供商,即saml2-js。
答案 1 :(得分:1)
经过@Kellen Murphy的搜索并获得帮助之后,防止欺骗的最佳解决方案是使用env变量。
例如,我想将USERNAME属性发送到我的应用程序。
所以,我创建了一个php页,可以从标题中读取会话数据
<html>
<head>
<title>Session data</title>
</head>
<body>
<?php
print_r($_SERVER["HTTP_X_USERNAME"]);
?>
</body>
</html>
然后我从
开始php页面php -S localhost:9000
然后我将env变量作为标头变量
RequestHeader set X-USERNAME %{USERNAME}e
ProxyPass /Session http://localhost:9000
ProxyPassReverse /Session http://localhost:9000
现在我可以通过攻击页面来检索属性了: https://example.com/Session