我目前正在做一些关于在实时web应用程序中实现基于事件的授权的最佳方法的研究。与普通的基于REST调用的应用程序相比,发布的事件是需要在服务器上进行授权的某种api调用,因为存在不同类型的授权级别。在当前的REST应用程序中,授权通常在第一步(令牌验证)中处理,然后根据调用所需的用户权限检查基于调用的用户权限。在实时web应用程序中也应该这样做吗?或者是否需要在应用程序架构方面进行某种思维转变?
当前应用程序的代码示例(对于实时需求可能不是一个好示例,但它非常好地显示了所需的授权类型):
app.get('/api/profile/email', passport.authenticate('bearer', {
session: false
}), authorize('user.profile.email.read'), function (req, res) {
// Do something and respond
});
我期待着你们的一些伟大的投入!
我做过的一种方法(如果使用套接字,让我们说)是在初始登录后使用存储在redis中的令牌或刷新令牌。它使用身份验证中间件对令牌进行检查,以确保它可以继续执行,否则将发送错误。如果你的代码是正确的,你可以传递令牌,把它拉出来,并使用中间件检查它。
io.use(function(socket,next){
var token = socket.request._query.tokenOfImmortality;
tokenHandler.verify(token,next); //Function handles checking redis for access
}