如何在Spring Security预身份验证中为siteminder验证SM_USER标头

时间:2019-01-18 08:51:39

标签: spring spring-boot siteminder pre-authentication

我正在尝试使用针对Siteminder的预身份验证安全性来创建安全的Spring Rest API。

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

如果不提供标头,则会出现错误org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException:在请求中找不到有效的SM_USER标头。

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

1 个答案:

答案 0 :(得分:0)

前端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中称为“旧版”标题模式),因此您可能希望使应用程序相对于标头名称,例如SMSERVERSESSIONIDSMUSERSMUNIVERSALID

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

HTH!

-理查德