跨平台登录

3
我正在开发一个应用程序,其中所有用户身份验证都在基于CFWheels的ColdFusion应用程序中进行,但与文件服务器的交互是通过Node.js应用程序完成的。我需要确保在CF应用程序上登录的用户有权访问节点服务器中的文件。我考虑设置一个带有CFToken的cookie,然后让节点服务器读取并传递给ColdFusion,询问“嘿,这个令牌能否访问此文件”。
我的唯一问题是我不确定CFTokens是否会被重复使用,如果会,那么我应该使用什么替代品?
如果其他人有其他方法来处理这种需要在多个引擎之间可重用身份验证的情况,我很想听听您的策略。
2个回答

4

这听起来是个不错的方法。

但是,我会使用CFCOOKIE来设置自己设计的cookie。

当然,两个服务器必须共享一个域名才能读取相同的cookie。您还需要将cookie设置为域cookie。

一种干净的架构方式是创建一个完整的CFC专门用于安全性。

它将具有生成和验证登录令牌的方法。

您的CF应用程序将使用此方法生成令牌,您可以使您的node.js应用程序通过Web服务调用此方法

http://server.com/path/security.cfc?method=validateToken&token=whatever

假设两个系统都可以访问相同的数据存储,更有效的方法是使用相同的算法在两个系统中生成/解码(如果需要)令牌,并允许node.js应用程序直接访问数据存储。我们需要做的是将“会话”令牌存储在mongodb中,并从每个应用程序(CF、Java和Rails)直接访问数据存储。CF系统负责初始身份验证。其他两个系统不进行身份验证,只验证令牌,如果未找到/无效等,则以适当的方式响应。

听起来很合理。我们的主要数据库是MySQL,但我可能会使用MongoDB来存储当前登录信息,只存储会话令牌和用户ID。这样我就拥有了MySQL的健壮性和MongoDB的灵活性。 - Dave Long
我遵循相同的基本概念,但我将令牌作为X-Auth-Token标题传递。客户端负责在所有API或Ajax请求中发送令牌。在MongoDB中,令牌在N分钟后过期。每个验证都会重置到期时间。 - Aaron Greenlee

0

是的,你想要了解的是SSO(单点登录)。

OpenID是一个流行的方案,可以与多个平台(包括CF)一起使用。

如果你感到冒险...只需花费一些精力,就可以相对容易地设计出自己的机制来共享登录信息 - 通常是通过cookie或header共享某些令牌,也可以通过RESTful(或任何)形式的webservice调用来实现。


抱歉,从CF的角度来看我不确定(已经有一段时间没有使用CF了),但我对SSO非常了解,并且已经使用所描述的方法在各种平台上集成了许多站点。 - Brian

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