OAuth 2.0 授权机制
安全防护519 字预计 1 分钟阅读
详细剖析 OAuth 2.0 四种授权模式的运作流程,及如何防范授权码截获等安全风险。
引言
在现代互联网生态中,单点登录(SSO)和第三方开放平台(如使用微信、GitHub 账号登录我们的应用)是不可或缺的能力。OAuth 2.0 作为业界公认的授权协议框架,提供了一种在不将用户密码暴露给第三方应用的情况下,安全获取临时访问权限的规范体系。
核心授权模式深度剖析
OAuth 2.0 规定了四种标准的授权机制,以适配不同的业务场景:
1. 授权码模式 (Authorization Code)
最安全、也是目前最主流的模式。它引入了后端服务器作为媒介,使得访问令牌(Access Token)完全在后端与授权服务器之间传输,不会暴露在客户端浏览器上:
- 客户端将用户引导至授权服务器。
- 用户同意授权,授权服务器返回一个临时的“授权码(Code)”。
- 客户端通过后端服务器,拿着 Code 和客户端私钥(Client Secret)去授权服务器换取 Access Token。
2. 隐式模式 (Implicit)
主要针对纯单页应用(SPA)。由于没有后端服务器,授权服务器直接在浏览器中将 Token 返回给前端页面。该模式目前已被 OWASP 等安全组织弃用,推荐改用带有 PKCE 的授权码模式。
OAuth 2.0 安全防灾措施
必须强制校验 state 参数
在授权请求中,客户端必须生成一个随机数放入 state 参数中,并在回调时进行比对。这能够有效防止**跨站请求伪造(CSRF)**攻击,确保返回授权码的回调请求是由该用户本人发起的。
重定向 URI (Redirect URI) 强一致校验
授权服务器在回调前,必须严格比对客户端请求的 redirect_uri 与注册时配置的地址是否完全一致(避免使用前缀模糊匹配),防止黑客通过构造特殊的 redirect_uri 将授权码截获到攻击者服务器。