1 windows-live-id dotnetopenauth liveconnect oauth-2.0 live-connect-sdk
首先感谢您的宝贵时间。我对Live Connect的OAuth2 API表示严重关注。
我遵循此步骤,并使用DotNetOpenAuth为我们的联合身份和访问管理系统实现/集成LiveId身份验证/授权。
http://msdn.microsoft.com/zh-CN/library/live/hh243647.aspx#authcodegrant
在很长一段时间内,一切正常。但是现在在解决LiveId登录模块的重放攻击问题时遇到了严重的麻烦。让我们看一下以上文章中的授权代码授予流程。
“ * 4。用户代理使用重定向URI调用客户端,该重定向URI包括授权码和客户端提供的任何本地状态。例如:... Callback.htm?code = AUTHORIZATION_CODE。5.客户端请求来自授权服务器令牌端点的访问令牌,使用其客户端凭据进行身份验证,并包括在上一步中接收到的授权代码。客户端包括用于获取验证授权代码的重定向URI。
在步骤4之后,Live Connect OAuth2服务器将使用授权代码和状态返回我的回调端点,如下所示:
问题是,授权代码可以多次使用。因此,这会导致严重的重放攻击问题,例如以下情况:
用户A登录到我的应用程序时,选择LiveId进行登录,然后将他重定向到LiveId登录页面。然后,他登录,Live Connect OAuth2服务器使用代码= xxx&state = yyy返回到回调端点。用户A然后使用此授权代码获取访问令牌。
用户B登录到我的应用程序时,选择LiveId进行登录,然后登录LiveId的登录页面。Live Connect OAuth2服务器现在返回,代码为= kkk&state = ggg
如果这一次,请使用Webscarab之类的工具来捕获响应/请求,然后将OAuth2服务器的返回值更改为code = xxx&state = ggg(旧的授权码是提供给用户A,而不是B)。然后,使用此重播授权代码请求访问令牌的过程很顺利。你猜怎么着?我再次收到了A的访问令牌,该令牌是在A之前提供给用户A的。最终,用户B可以以用户A的身份登录我的应用程序。
请注意,对Google OAuth2服务器应用与上述相同的重播攻击,我从服务器收到错误的请求错误,Google OAuth2授权代码永远不能使用超过一次。而且代码流或完全相同,Google登录名和LiveId登录名的实现完全相同。
我使用DotNetOpenAuth.OAuth2.WebServerClient为Google和LiveId实施OAuth2身份验证流程。同样,代码完全相同,但是当重复使用授权代码时,Google OAuth2服务器返回了“错误请求”,但是LiveId返回了先前用户的旧访问令牌。
这是一个严重的安全问题。希望你们对此有一些想法。或者希望我在某些方面是错误的。请指出。
非常感谢Phuc Le。
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |