如何在sails.js单页应用程序中处理多个身份验证策略?

15

如何处理sails.js SPA上的多个身份验证策略?

我正在构建一个单页面应用程序,前端使用Angular,后端使用sailsjs。目前我正在使用sails-auth(内部使用passportjs)将我的身份验证逻辑绑定到我的用户模型。

我在前端安装并可用多个护照提供者,例如passport-githubpassport-facebook,但也有一个经典的passport-local,以便用户只需使用用户名和密码进行注册和登录。

我希望我的客户端(单页面应用程序和可能的其他应用程序)在身份验证之后使用令牌而不是cookie/会话,以便更容易进行扩展,并且跨域请求也将更加容易。这也将使移动集成变得更加容易。

我知道必须使用OAuth提供程序回调函数,在此我想要实现的流程如下:

enter image description here

我知道可以通过将sessionAuth策略替换为可以从标头读取令牌并查询Tokens模型的tokenAuth策略,但我的问题是:

  • 当使用用户名/密码登录时,请求可以通过简单的AJAX调用进行,因此很容易将令牌传递回SPA。当使用像github等提供程序时,当回调被调用时,我应该将令牌动态嵌入到正在服务的HTML中吗?
  • sail-auth的policies/passport.js显示,默认情况下它依赖于内置会话以持久化登录/序列化和反序列化userID。 我如何将其与sails内置会话解耦,以便为用户生成令牌并将令牌嵌入到我的主页中返回?
  • 提前致谢!


    2
    Waterlock插件似乎可以处理OAUTH提供者认证jwt,但是我发现我无法理解它的流程(文档缺乏有价值的信息),即使它能够与分离的SPA(不由Sails本身提供服务)一起工作。我非常需要你的问题的答案。 - Cyril CHAPON
    你好,你找到答案了吗? - Saurabh Gour
    2个回答

    1
    在认证路由上,您可以选择使用基于passport.js的后端身份验证(无会话),使用令牌进行tokenAuth,并将令牌转发给用户。
    然后,在安全路由中,您可以在策略(拦截每个路由)中放置verifyToken调用。
    免责声明:我自己没有尝试过这个。

    0

    我已经使用这些步骤有一段时间了。

    第一步(全局):$ npm install -g sails

    第二步(应用程序):$ sails new myApp

    第三步(文件):将https://github.com/carlospliego/sails-token-auth-setup中的每个文件复制到其相应的文件夹中

    第3A步:如果要添加另一个身份验证策略,只需在app/policies/目录中添加另一个文件即可

    以下是可能看起来像的示例

     module.exports = function hasValidProductApiToken(req, res, next) {
          if(someCondition){
             next(); // Call next to continue
          }
    
     };
    

    步骤 4(策略):将此代码添加到您的 config/policies.js 文件中

     '*': "hasToken",
     UserController: {
        "create": true
     },
     AuthController: {
        '*': true
     }
    

    第五步:更改 config/tokenSecret.js 的值

    第六步:(依赖项)

    • npm install --save passport
    • npm install --save passport-local
    • npm install --save bcrypt-nodejs
    • npm install --save jsonwebtoken
    • npm install --save express-jwt

    你的端点将看起来像这样:

    • POST/GET/PUT/DELETE 用户/
    • POST auth/login
    • DELETE auth/logout

    这里有一个非常好的指南,介绍如何在Sails中创建基于令牌的身份验证:https://github.com/carlospliego/sails-token-auth-setup


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接