2

我正在尝试使用 siteminder 的预身份验证安全性创建一个安全的 spring rest api。

我尝试了一个解决方案,我得到了 SM_USER,当我通过添加具有随机值的新标头 SM_USER 在邮递员中对其进行测试时,它似乎工作正常。

如果您不提供标头,我将收到错误 org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException: SM_USER header not found in request which is valid。

但是我怎么能确定这是安全的呢?如果有人知道我的 rest api 的 URL 可以毫无问题地调用它。我应该在春季检查其他内容还是只有 siteminder 提供用户身份验证?

4

1 回答 1

2

前端的 SiteMinder Web 代理是会话有效的保证 - 您必须通过服务器/网络配置确保您的应用程序在没有首先通过 SiteMinder Web 代理的情况下无法直接访问。

此外,SiteMinder 断言多个标头。SM_USER不应单独使用,因为在某些情况下,当用户实际上没有有效会话时,Web 代理可以断言它。相反,您应该首先查找 的存在(非空白)SM_SERVERSESSIONID,它仅在会话有效时才存在。

最后,我通常尽量避免SM_USER——因为SM_USER实际上根本不是用户属性,而是“用于身份验证的登录标识符”。如果 SiteMinder 通过联合(例如 SAML)或 x509 身份验证对用户进行身份验证,SM_USER则与使用登录表单的情况将大不相同。相反,最好在 SiteMinder 中设置一个作为用户属性的“通用 id”,并在标题中显示为SM_UNIVERSALID. 您的 SiteMinder 管理员将知道如何执行此操作(并且可能已经知道 - 看看您是否已经有SM_UNIVERSALID可用的标题)。

另一项注意事项是,在某些 SiteMinder 配置中,下划线不会出现在标题名称中(在 SiteMinder 中使用下划线称为“旧”标题模式),因此您可能希望使您的应用程序可以根据标题名称进行配置,例如SMSERVERSESSIONID,SMUSERSMUNIVERSALID

如果您想以编程方式重新验证会话,可以使用 SiteMinder 代理 API 或 REST API,或者查看我公司的产品“SSO/Rest”,它为 SiteMinder 和其他 SSO 提供者提供了一套全面的统一 REST 接口(http://www.idfconnect.com)。

-理查德

于 2019-01-20T01:18:37.940 回答