gpt4 book ai didi

node.js - Passport JS + Rest API +SPA

转载 作者:搜寻专家 更新时间:2023-10-31 23:01:44 25 4
gpt4 key购买 nike

我正在使用 ExpressJS 构建 RestAPI,客户端是 SPA,支持通过 Google/Facebook/GitHub/... 通过 PassportJS 进行身份验证。我的问题,来自社交登录的回调将返回到 RestAPI 或 SPA?如果系统返回到 RestAPI,如何重定向到 SPA 上的主页。另一种情况,如果系统回调 SPA,RestAPI 如何从客户端接收和验证 token 。请让我知道常见的方法。

谢谢,

最佳答案

您将回调 url 提供给身份验证服务,您决定是由 SPA 还是 API 处理路由。 Oauth 身份验证(简化)有两个步骤。 github上的插图:

步骤 1) https://github.com/login/oauth/authorize?client_id=*YOUR_CLIENT_ID*$redirect_uri=*YOUR_REDIRECT_URI*
打开一个弹出对话框,请求用户授权您的应用程序,如果成功返回到您的 redirect_uri 和查询参数 ?code=AUTHORIZATION_CODE

第 2 步)您通过 https://github.com/login/oauth/access_token

将上述 AUTHORIZATION_CODE 换成长期访问 token

在您的架构中,您应该在 SPA 中执行第 1 步,在其余 api 中执行第 2 步。您应该依靠 spa 从身份验证提供程序获取授权代码,将其发送到您的 rest api,让 rest api 交换长期访问 token ,将该 token 保存到数据库,使用它来检索用户信息或执行无论你想要什么,然后登录用户。

对于第 1 步,您只需要 CLIENT_ID,对于第 2 步,您还需要 CLIENT_ID 和 CLIENT_SECRET,因此您可以通过仅将 CLIENT_SECRET 存储在服务器端来确保您的应用程序安全。

让回调 uri 由您的 rest api 处理的问题在于,回调 uri 是由身份验证提供程序(在本例中为 github)调用的,而不是由您的 SPA 调用的,因此您无法发送重定向的响应用户到主页。这仅在您的模板和路由是在服务器端处理时才有效,我认为您的架构不是这种情况。

从文档中看并不明显,但是当你在像 app.post('/login',
passport.authenticate('github'),
,中间件会检查 'code' 查询参数是否包含 AUTHORIZATION_CODE,如果没有,则开始第 1 步,如果是,第 2 步。

关于node.js - Passport JS + Rest API +SPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37558446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com