Auth2.0
基本概念
Redirect URLs and State
OAuth 2.0 API 会将用户重定向到之前在服务中注册的 URL,以防止攻击者拦截授权代码或访问令牌,实施重定向攻击。
为了确保安全,重定向 URL 必须是 https 端点,以防止授权代码在授权过程中被截获。如果重定向 URL 不是 https 端点,攻击者就有可能截获授权代码,并利用它劫持会话。唯一的例外是在loopback接口上运行的应用程序,如本地桌面应用程序,或进行本地开发时。不过,即使规范允许这种例外情况,你遇到的某些 OAuth 服务可能还是需要 https 重定向 URL。
OAuth 服务应该寻找与重定向 URL 完全匹配的内容。这意味着 https://example.com/auth 的重定向 URL 与 https://example.com/auth?destination=account 不匹配。最佳实践是避免在重定向 URL 中使用查询字符串参数,并使其仅包含路径。
“state”参数可用于对应用程序状态进行编码,但如果您不在请求中包含 PKCE 参数,则它还必须包含一定量的随机数据。 state 参数是一个对 OAuth 2.0 服务不透明的字符串,因此在初始授权请求期间传入的任何状态值都将在用户授权应用程序后返回。例如,您可以将重定向 URL 编码为 JWT 之类的内容,并在用户重定向回您的应用程序后对其进行解析,以便您可以在用户登录后将其带回到适当的位置。
请注意,除非您使用 JWT 等签名或加密方法对状态参数进行编码,否则当状态参数到达重定向 URL 时,您应将其视为不可信任/不可验证的数据,因为任何人都可以在重定向回您的应用程序时修改该参数。
Client ID and Client Secret
Client ID被视为公开信息,可用于构建授权 URL,或包含在网页的 JavaScript 源代码中。Client Secret必须保密。请勿将其提交到 git 仓库或包含在任何 JavaScript 文件中!
参考资料
最后更新于