【身份与访问控制工程】OAuth 2.1 与 PKCE:现代授权主路径

💡 原文中文,约26200字,阅读约需63分钟。
📝

内容提要

某团队的单页应用在安全审计中发现access_token以URL fragment形式暴露,存在高风险。审计指出,攻击者可通过浏览器历史和日志获取token。OAuth 2.1通过废弃隐式授权和强制使用PKCE等措施提升安全性,确保公共客户端安全地使用授权码流程。PKCE通过动态生成挑战和答案,防止授权码被拦截,增强了OAuth的安全性。

🎯

关键要点

  • 某团队的单页应用在安全审计中发现access_token以URL fragment形式暴露,存在高风险。

  • 审计指出,攻击者可通过浏览器历史和日志获取token。

  • OAuth 2.1通过废弃隐式授权和强制使用PKCE等措施提升安全性。

  • PKCE通过动态生成挑战和答案,防止授权码被拦截,增强了OAuth的安全性。

  • OAuth 2.1的设计目标是合并最佳实践、删除不安全的授权方式,并将建议改为必须。

  • OAuth 2.1直接删除了implicit grant和ROPC,所有public client必须使用授权码流程加PKCE。

  • PKCE的适用范围扩展到所有public client,并且从推荐升级为必须。

  • OAuth 2.1要求redirect_uri精确匹配,禁止URL query string传递access_token。

  • OAuth 2.1建议对public client启用refresh_token rotation,以提高安全性。

  • PKCE通过动态生成的code_verifier和code_challenge增强了授权码流程的安全性。

延伸问答

OAuth 2.1相较于OAuth 2.0有哪些主要变化?

OAuth 2.1废弃了隐式授权和密码授权,强制所有公共客户端使用授权码流程加PKCE,并要求redirect_uri精确匹配,禁止在URL查询字符串中传递access_token。

PKCE的作用是什么?

PKCE通过动态生成挑战和答案,防止授权码被拦截,增强了OAuth的安全性,特别适用于没有client_secret的公共客户端。

OAuth 2.1如何提高公共客户端的安全性?

OAuth 2.1要求公共客户端必须使用PKCE,并建议启用refresh_token rotation,以提高安全性,防止token泄露。

OAuth 2.1对redirect_uri的要求是什么?

OAuth 2.1要求redirect_uri必须精确匹配,禁止使用前缀或模式匹配,以防止开放重定向攻击。

OAuth 2.1如何处理refresh_token的安全性?

OAuth 2.1建议对公共客户端启用refresh_token rotation,每次使用refresh_token时发放新的token并使旧的失效,以降低泄露风险。

OAuth 2.1中access_token的传递方式有哪些限制?

OAuth 2.1禁止在URL查询字符串中传递access_token,只允许通过Authorization header传递,以减少泄露风险。

➡️

继续阅读