Jac*_*ong 4 rest node.js express passport.js
我正在使用ExpressJS构建RestAPI,客户端是SPA,并支持通过PassportJS通过Google / FaceBook / GitHub / ...进行身份验证。我的问题是,从社交登录回调将返回RestAPI或SPA?如果系统返回RestAPI,如何重定向到SPA上的主页。另一种情况,如果系统回调SPA,RestAPI如何从客户端接收并验证令牌。请让我知道常见的方法。
谢谢,
您将回调URL提供给身份验证服务,然后决定是通过SPA还是API处理路由。Oauth身份验证(简化)有两个步骤。github上的插图:
步骤1)https://github.com/login/oauth/authorize?client_id=*YOUR_CLIENT_ID*$redirect_uri=*YOUR_REDIRECT_URI*
打开一个弹出对话框,要求用户授权您的应用程序,如果成功返回带有查询参数?code = AUTHORIZATION_CODE的 redirect_uri
步骤2)您通过以下方式将上述AUTHORIZATION_CODE交换为长期访问令牌 https://github.com/login/oauth/access_token
在您的体系结构中,应该执行SPA中的步骤1和其余api中的步骤2。您应该依靠spa从身份验证提供程序获取授权代码,将其发送到您的rest api,让rest api交换长期访问令牌,将该令牌保存到数据库中,使用它来检索用户信息或执行无论您要使用它什么,然后登录用户。
对于步骤1,您只需要CLIENT_ID,对于步骤2,也只需要CLIENT_ID和CLIENT_SECRET,因此可以通过仅将CLIENT_SECRET存储在服务器端来确保应用程序的安全。
由您的rest api处理回调uri的问题是,回调uri是由身份验证提供程序(在本例中为github)而不是由SPA调用的,因此您无法发送将用户重定向到主页。这仅在您的模板和路由在服务器端处理的情况下才有效,我认为在您的体系结构中并非如此。
从文档中看不出来,但是当您在路径上注册护照中间件时app.post('/login',
passport.authenticate('github'),
,中间件将检查“代码”查询参数是否包含AUTHORIZATION_CODE,如果不是,则从步骤1开始,如果是,则从步骤2开始。
归档时间: |
|
查看次数: |
1653 次 |
最近记录: |