django - 如何将 OAuth2 与后端和前端集成
问题描述
我正在学习 OAuth2 以集成第三方提供商,如 Facebook 或 Github。但是,当您构建具有后端和前端的应用程序时,我正在努力寻找描述如何集成它的资源。
在这个例子中,我们假设有一个前端(myfrontend.com
)运行类似 Vue.js 的东西。mybackend.com
还有一个运行 Django 之类的后端 ( )。还有像 GitHub 这样的第三方提供商。
我的想法是使用这个流程:
前端重定向到提供者授权 url。例子:
https://github.com/login/oauth/authorize?client_id=<client_id>&redirect_uri=https://mybackend.com/callback?return-to=https://myfrontend.com/home
。如果用户授权,后端接收
code
./callback
后端发送身份验证请求(服务器端)
code
以到达access_token
第 3 方提供商。如果用户尚不存在,后端将创建一个用户并保存与该用户关联的 access_token。
后端为用户创建一个新的本地令牌(用于对 mybackend.com 进行身份验证)(JWT 或 OAuth2)。
后端
https://myfrontend.com/home
使用正文中的令牌重定向到(在第一个 url 中指定)。前端接收令牌并保存在本地存储中。
当前端代表用户需要来自 GitHub 的资源时,会向我的后端发送一个请求,后端又使用 save access_token 并从 GitHub 请求资源。
我的问题是这样的:
- 这个流程是安全的还是我应该重新考虑?
- 在第 6 步中,我是否必须确保 redirect-url 指向我的域
myfrontend.com
。如果您以一种糟糕的方式检查它,感觉就像它会留下一个安全漏洞。
解决方案
推荐阅读
- php - 从 PHP 文件运行 CLI 命令
- php - XAMPP 控制面板配置文件在哪里?
- javascript - 如何更新在 Promise 内的 Promise 之外声明的变量?
- python - 使用 python、flash 和 twilio 自动回复 whatsapp
- java - 为什么我的通知在 Android > 7 上不起作用?
- django - 为什么 django inspectdb 会跳过一些 id?
- airflow - Airflow 上的条件调度
- php - Laravel using subElements in with check in a where case laravel eloquent
- unity3d - Oculus 手部追踪:获得正确的手部速度?
- html - 找不到包含文件