跨多个应用程序进行身份验证

时间:2016-10-16 21:02:40

标签: node.js sails.js passport.js

我正在构建2个快速应用程序,并且我试图在两个应用程序中获得SSO身份验证。从本质上讲,我正在寻找一种方法将会话转发到后端系统。

Person A logs into the front end application
Person A makes a request to the front end system
Front end system makes a service (REST) call to the back end system
Back end system determines if person A has the correct role to make the request
Back end system makes or denies the request

以下是我的想法:

2 sailsJS应用程序。一个处理前端和前端的人身份验证,以及处理基于后端权限的数据库访问权限。

我在考虑使用后端应用程序的sails-permissions,以及前端的sails-permissions或sails-auth。两者都是passport.js的包装。

这样做的漫长道路(而且我不相信正确的方式,因为它需要重定向到后端系统)是使用某种SSO(https://www.npmjs.com/package/passport-sso

我更喜欢做的是使用请求转发会话。像

这样的东西
    var putArgs = {
        data: myData,
        headers: {"session": req.session}
    }

    client.put("http://localhost:81/myServiceEndpoint", putArgs, function(data, response){
        //Do something with response
    })

我计划将redis用于会话缓存,那么两种应用程序是否都可以使用相同的redis实例并传递会话密钥?

注意:

如果操作正确,用户将无法与后端系统进行任何交互。前端系统将代表用户向后端系统发出请求。

为了使sails-permissions能够工作,用户必须完全通过身份验证。只是传递用户的_id并进行查找将无法正常工作。

1 个答案:

答案 0 :(得分:0)

我是如何实现这一点的,就是拥有一个中央SailsJS REST API,当提供有效的用户凭据时,它会返回一个身份验证令牌。

我们目前有两个前端(一个SailsJS,一个EmberJS),它将此令牌存储为具有相同名称的localStorage密钥(例如my-site-token)。然后,如果前端在localStorage中看到这个,他们会向它提供任何REST请求,嘿presto,SSO。无需在任何地方存储会话。令牌实际上是会话。