我正在构建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并进行查找将无法正常工作。
答案 0 :(得分:0)
我是如何实现这一点的,就是拥有一个中央SailsJS REST API,当提供有效的用户凭据时,它会返回一个身份验证令牌。
我们目前有两个前端(一个SailsJS,一个EmberJS),它将此令牌存储为具有相同名称的localStorage密钥(例如my-site-token)。然后,如果前端在localStorage中看到这个,他们会向它提供任何REST请求,嘿presto,SSO。无需在任何地方存储会话。令牌实际上是会话。