请描述 OAuth 2.0 的授权码模式(Authorization Code)的完整交互流程,并分析该协议在实施中可能面临的典型安全威胁。
考察说明
考察对 OAuth 2.0 授权码流程的理解以及对其安全风险的认识。
回答思路
- 【回答框架 1】OAuth 2.0 授权码模式用于第三方应用代表用户访问受保护资源,核心是授权服务器向第三方应用颁发授权码,第三方应用再用授权码换取访问令牌。流程包括:用户访问第三方应用,第三方应用将用户重定向到授权服务器;用户认证并同意授权后,授权服务器通过重定向回调携带授权码;第三方应用用授权码和客户端密钥向令牌端点换取访问令牌;随后第三方应用使用访问令牌访问资源服务器。
- 【回答框架 2】安全风险方面,授权码可能被截获,因此要求使用 TLS 加密通信,并验证重定向 URI 的一致性,防止开放重定向。令牌传输和存储也需安全保护,避免泄露。CSRF 攻击可通过 state 参数抵御,确保请求来源可信。客户端凭证泄露会导致令牌被滥用,因此客户端需安全存储密钥。
- 【回答框架 3】此外,授权服务器的令牌端点必须验证客户端身份,并限制令牌权限与有效期,以减少攻击面。资源服务器应验证令牌的有效性与作用域。第三方应用也需安全处理回调请求,防止授权码注入或令牌窃取。
- 【关键点 1】授权码流程是 OAuth 2.0 中最安全的方式,因为授权码只在后端交换令牌,减少泄露风险。
- 【关键点 2】使用 state 参数防止 CSRF 攻击,重定向 URI 必须严格校验。
- 【关键点 3】所有通信必须使用 TLS,令牌必须安全存储并设置合理过期时间。
- 【关键点 4】客户端凭证泄露会导致令牌被滥用,必须严格保护。
- 【关键点 5】授权服务器应验证客户端身份,资源服务器应验证令牌作用域。
- 【易错点 1】认为授权码模式绝对安全,实际上若回调处理不当、重定向 URI 校验不严或缺少 state 参数,仍然可被攻击。
- 【易错点 2】忽略了对令牌的保护,如存储在 localStorage 易受 XSS 攻击,应优先使用 HttpOnly cookie 或安全存储。
- 【易错点 3】忘记对回调请求的来源进行验证,导致授权码被恶意利用。