我目前正在研究跨域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]
是MrUser的是foo.com和bar.com已商定加密ID)。如果没有有效的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参数?
答案 0 :(得分:2)
第一个问题是任何加密/解密方案都可以在明显可见时找出。您最好在PKI加密/解密平台上实现更多内容,其中加密密钥是公共的,但解密密钥是私有的。加密需要适当复杂,以增加“破解时间”,并且需要资源来执行密钥的加密/解密。
您拥有非公共域的事实将需要在标头中提供加密的部分(post或get),并以纯文本形式传递。虽然查询字符串信息在请求的生命周期内保持安全(编辑:假设为SSL),但它对浏览器历史记录(使其可供常用计算机访问)并不安全。
最严重的安全问题是“破解一切/破解所有”的概念。如果其中一台服务器遭到入侵,其加密/解密算法,盐等暴露出来,攻击者可能会通过随意生成有效的加密SSO密钥来破坏所有系统。
这些问题都不是非常悲惨的。我不会在银行或医疗机构实施这个计划,但对于像SO或Twitter这样的低风险网站来说,这是完全可以接受的。这一切都归结为管理资源,风险和收益。
答案 1 :(得分:2)
任何人都可以使用encryptedKey
作为MrUser获取访问权限。不需要加密,而是需要签名或消息认证服务。经过身份验证的消息应包含带有用户标识符的随机数以防止重放。
这样的协议很难设计。即使是多年来被广泛使用和审查的TLS也存在安全漏洞。不要尝试使用未经验证的身份验证机制。
答案 2 :(得分:1)
一个潜在的问题是,如果ssoauth加密密钥只是用户的加密ID。这样的设置将导致每次提供相同的密钥,因此可以由原始用户重复使用,或者由第三方重复使用。
避免这种情况的一种方法是保持foo.com和bar.com服务器的时钟相对同步,并发出包含日期/时间(模5分钟)的密钥。
人们经常试图使用Web客户端的IP地址作为此加密的元素之一,但这是一个坏主意,因为几个代理和网关在其池中使用不同的公共IP来访问不同的域/服务器。 / p>
每次允许使用不同密码的另一种方法是将bar.com重定向到
http://www.foo.com/sso.aspx
包含参数,例如
http://www.foo.com/sso.aspx?ParamForKey=some_random_number
并将ParamForKey用作加密过程的一部分
答案 3 :(得分:0)
有几个问题: 1)加密令牌有效多长时间?它应该只对几个秒有效。如果所有服务器都在ntp上,则很容易。到期还可以保护用户,以防他们拥有包含加密令牌的链接。如果您有许多bar.com服务器,则验证nonce很困难 - 您可以说有几秒钟的到期时间可以减轻重播次数。
2)SSO跨域问题是单点注销。如果用户注销foo.com会怎么样?必须使bar.com上的会话无效。您可以将XSRF bar.com注销作为黑客:)。您应该每隔15分钟使用bar.com beacon foo.com查看用户是否仍然登录。
3)如果用户没有注销bar.com并且它是多用户计算机而另一个用户登录foo.com会怎么样?如果用户标识不匹配,则必须确保不显示先前用户的数据。
4)正如其他人提到的,你可能想要在userid上签名或使用HMAC而不是加密。如果您进行加密,请记住保护密文的完整性。您不希望用户A在密文中翻转位以查看他们是否可以在bar.com上访问用户B的数据。
我会通过https进行重定向。
最后,正如大家所说,推荐人可能会被欺骗。不要相信他们。