我在服务器端使用Node.js和Passportjs的组合,在客户端使用Emberjs的应用程序。我目前的身份验证策略是使用Passport-Local以标准电子邮件/密码组合的身份对用户进行身份验证,然后挂接会话创建机制以生成身份验证令牌,将其保存到单独的表中并传回给用户用于任何进一步受保护的路线。 (在REST头中传递)。Nodejs - 是否需要解码身份验证令牌?
令牌的创建是好的,我这样做没有问题,但是如果我需要一个额外的步骤,我正努力工作。
目前,我通过使用一个随机node-uuid通过作为有效载荷,并且用户UID(另一个node-uuid)作为秘密生成与node-jwt-simple令牌。然后,我将其保存到客户端上的$.cookie
以及服务器侧的表格以及创建日期。
显然,node-jwt-simple中的其中一个步骤是对令牌进行编码。还提供了解码功能。我的问题是,当我正在进行身份验证检查时,是否需要将令牌解码为某些内容,或者只是检查用户的会话Cookie(REST标头)是否与数据库中的令牌匹配足够?我不想为了生成一个令牌而付出所有的努力,只是为了错过一个重要的步骤,但我没有看到我怎么能够将它解码成任何可以提供任何额外的有用安全性的东西。
UPDATE:
我觉得我的工作了这一点,昨晚:
的解决方案似乎是使用用户的UID作为有效载荷的智威汤逊,用静态的字符串作为秘密(摄来自类似服务器环境变量或类似的东西),然后仅将编码的令牌存储在数据库中。将令牌传递给客户端以进行重新认证,然后当客户端尝试访问受保护的路由时,他们必须将其UID与编码的令牌一起传递给服务器,服务器随后将其解码,并将解码后的净荷与UID已通过。如果它们匹配,则认证成功,否则令牌被破坏,用户必须再次登录。 通过这样做,它使令牌的存储在没有知道密钥或具有用户的UID的情况下实际上无用,但使认证过程更加安全。
认为我解决了它(为什么解码会很有用):如果我将用户的UID编码到令牌中(作为有效负载,在服务器端使用一些秘密但静态的字符串),那么在每次Auth请求时将UID和令牌一起传递给服务器,然后服务器可以解码令牌并根据UID检查有效载荷。如果它们匹配则认证失败,否则服务器将销毁令牌,并且必须重新登录。这样可以防止令牌在被服务器窃取时使用,并且如果客户端的cookies被劫持,只会留下安全漏洞,可以通过HTTPS解决。 –