我正在尝试使用针对Siteminder的预身份验证安全性来创建安全的Spring Rest API。
我尝试了一种解决方案,在其中我得到了SM_USER,当我在邮递员中通过添加带有随机值的新标头SM_USER对其进行测试时,它似乎可以正常工作。
如果不提供标头,则会出现错误org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException:在请求中找不到有效的SM_USER标头。
但是我如何确定这是安全的呢?如果有人知道我的rest api的URL可以毫无问题地调用它。我应该在春季检查其他内容,还是只有siteminder提供用户身份验证?
答案 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中称为“旧版”标题模式),因此您可能希望使应用程序相对于标头名称,例如SMSERVERSESSIONID
,SMUSER
,SMUNIVERSALID
等
如果要以编程方式重新验证会话,则可以使用SiteMinder代理API或REST API,或者查看我公司的产品“ SSO / Rest”,该产品为SiteMinder和其他产品提供了一套全面的统一REST接口SSO提供者(http://www.idfconnect.com)。
HTH!
-理查德