假设用户想要授权mykittenblog.com代表他拨打电话到payment.com。 mykittenblog.com让人们像在这样登录payment.com
payment.com/oauth2/authorize?id=12345&redirect=http://mykittenblog.com
因此,payment.com可以使用mykittenblog.com可以与其客户端密码一起使用的中间身份验证代码进行响应,以在payment.com上检索OAuth持票人令牌
现在'redirect'参数有一个开放的重定向漏洞,允许泄漏授权代码。
如果用户登录
payment.com/oauth2/authorize?id=12345&redirect=http://evilserver.com/codestealer
payment.com将以
回复Location: http://evilserver.com/codestealer?code=4312871236481723874
在这种情况下可能存在哪些危险?
答案 0 :(得分:1)
如果中间授权代码被恶意应用程序窃取,则它将能够发出访问令牌并获取对资源的访问权限。如果还发出刷新令牌,那么它将能够随时更新该访问令牌。
如果您的客户端是机密的,那么泄漏是有限的(但并非不可能),因为恶意客户端必须获取您的应用程序凭据。
它们是防止代码泄漏的反措施。 重定向uris的注册是一个良好的开端,但还不够。 另一种方法是使用RFC7636中描述的代码交换证明密钥。如果没有这个PKCE,恶意应用程序就不可能发出访问令牌,因为挑战不容易被猜到。
从我的观点来看,应该始终使用PKCE,而不仅限于公共客户。