OAuth2.0 - 安全性考虑

227 阅读3分钟

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

oauth2.0漏洞问题产生原因

oauth2.0协议本身设计是安全的,但是不同的开放平台开发者能力参差不齐,在开发过程中没有严格按照协议进行开发,或对流程中的参数校验不完整,造成了一些流程上的漏洞。

措施

客户端身份验证

授权服务器必须对客户端进行身份验证。如果身份验证不可用,应该采取其他方式验证。授权服务器必须要求注册任何用于接收授权响应的重定向URI并且应该利用其他手段保护资源所有者防止这样的潜在仿冒客户端。

访问令牌

访问令牌在传输和储存时必须保持机密性,并只与授权服务器、访问令牌生效的资源服务器和访问令牌被颁发的客户端共享。

当使用隐藏式授权许可类型时,访问令牌在URI片段中传输,这可能泄露访问令牌给未授权的一方。

授权服务器必须确保访问令牌不能被生成、修改或被未授权一方猜测而产生有效的访问令牌。

客户端应该为最小范围的需要请求访问令牌。授权服务器在选择如何兑现请求的范围时应该将客户端身份考虑在内,且可以颁发具有比请求的更少的权限的访问令牌。

刷新令牌

授权服务器可以给Web应用客户端和本机应用程序客户端颁发刷新令牌。当使用的授权模式不是很安全,可以不提供给客户端。

刷新令牌在传输和储存时必须保持机密性,并只与授权服务器和刷新令牌被颁发的客户端共享。授权服务器必须维护刷新令牌和它被颁发给的客户端之间的绑定。授权服务器必须验证刷新令牌和客户端身份之间的绑定,无论客户端身份是否能被验证。当无法进行客户端身份验证时,授权服务器应该采取其他手段检测刷新令牌滥用。

授权服务器必须确保刷新令牌不能被生成、修改或被未授权一方猜测而产生有效的刷新令牌。

授权码

授权码必须限制在多长时间内有效(越短越好),使用一次后必须失效,防止被其他人使用。获取授权码,尽可能的加上客户端身份验证,并确保这个授权码只颁发给一个客户端。

重定向uri

当使用授权码许可类型请求授权时,客户端可以通过redirect_uri参数指定重定向uri。 如果攻击者能够伪造重定向uri的值,这可能导致授权服务器向攻击者控制的uri重定向带有授权码的资源所有者用户代理。

为了防止这种攻击,授权服务器必须确保重定向uri和换取授权的重定向url 相同。必须要求客户端注册他们的重定向uri。如果在请求中提供了重定向uri,授权服务器必须对比已注册的。

密码凭证

尽量不要使用。除非其他模式不可行。

请求响应的机密性

访问令牌、刷新令牌、资源所有者密码和客户端凭据不能以明文传输。授权码不应该以明文传输。