我目前正在研究跨域SSO实现,并且我可能无法使用第三方SSO提供程序。此实施SSO的潜在安全问题是什么?
我在线发现了一个包含系列重定向和加密查询字符串参数的自定义实现。
MrUser登录到
http://www.foo.com
MrUser点击一个链接到
http://www.bar.com/page.aspx
MrUser上bar.com没有通过认证,但bar.com有重定向到
http://www.foo.com/sso.aspx
验证码
sso.aspx页面检查cookie集合中的有效ASP.NET身份验证Cookie。如果存在,sso.aspx将重定向到
http://www.bar.com/page.aspx&ssoauth=[encryptedkey]
(其中[encryptedkey]
是foo.com和bar.com已同意的MrUser的加密标识)。如果没有有效的ASP.NET身份验证cookie,那么它只是重定向而没有ssoauth
参数。Bar.com执行检查以避免无限重定向循环,然后解密
ssoauth
值。如果没有ssoauth参数,那么MrUser会被重定向到登录页面,否则Bar.com将使用解密后的id在将其发送到page.aspx之前对MrUser进行身份验证。
这种方法的潜在安全问题(或其他类型的问题)是什么?
(引用:http://blogs.neudesic.com/blogs/michael_morozov/archive/2006/03/17/72.aspx)
编辑:为响应答案援引加密ID是一样的,每次和一个攻击者可以使用它来访问 - 如果有什么bar.com检查引用,以便它只接受来自foo.com的ssoauth参数?
我建议你看看基于声明的安全性和代号“Velocity” – 2010-02-05 01:12:14
引用者非常容易被欺骗。确保SSO加密密钥是真实的唯一方法是让生成服务器加密执行请求的系统的占用空间。足迹是非常困难的,因为足迹中没有太多的东西不能被复制/欺骗。 – 2010-02-05 01:21:52