第一步:用户点击第三方登录按钮,前端向后端发送一个请求,后端生成防 CSRF 攻击的 state ,连同授权地址一块返回,假设是 https://github.com/authorize/?state=abcdefg
第二步:前端获取到返回的授权地址,解析出 state ,存在 Cookie 中(或者存 LocalStorage ,但不知道通常的做法是存哪里?),将页面跳转至授权地址,地址中的 state 会在后续所有步骤中透传。
第三步:用户完成授权,授权方将页面重定向到某个地址,这个地址是前端路由,前端在这个路由里解析相关参数,将授权 code ,透传的 state ,连同 Cookie 中存储的 state 发送给后端登录接口。
第四步:后端接收到请求后,首先校验 Cookie 中的 state 和透传的 state 是否匹配,确保没有 CSRF 攻击。然后用 code 交换授权的用户信息,验证成功后即可登录这个用户。
几个疑问:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.