单页应用的 OAuth 2 授权登录

🍺 背景:

前端为单页 Web 应用,后端为 REST API Server,两者之间是跨域请求。做第三方登录的时候,需要做一个后端回调地址,用户在第三方登录页面授权之后,第三方会重定向到这个回调地址,并通过 URL query 形式传递 code 参数;后端拿 code 去换取 accessToken ,最终拿 accessToken 去获取用户信息,再决定是否登录成功、建立 session 。

🍺 问题:

由于是前后分离的架构,不是传统的 SSR 架构,登录成功之后如何通知到前端,并传递 session id ?

🍺 解决方法:

在后端新建一个代理地址,该代理地址只做一件事:重定向到前端落地页,并通过 URL query 原样传递 code 参数。前端落地页拿到 code ,通过网络请求将 code 提交到真正的后端回调地址,最终得到返回的 session id。

🍺 补充:

试想这样一个需求,如果有多个前端应用/网页(例如按业务划分的独立服务,部署在多个二级域名上),又该通知哪一个前端应用/网页?OAuth 2 的 state 参数可以派上用场。在转向第三方授权页面时,通过 query 的形式附加该参数,它会在回调的时候送回该参数。这样便可获知来源,重定向到正确的来源应用/网页。

Hugo Jing

Shanghai, China https://changshiban.com
温馨提示:以下为赞助商广告,用以维持服务器费用,从而继续创作原创内容,敬请谅解