我们有 2 个应用程序,一个在 Nodejs 中,另一个在 aspx 中。
登录页面在 Nodejs 中。我需要的是创建一个会话并从登录页面在 aspx 应用程序中验证我的用户,以便以后在 aspx 应用程序中导航。
作为网络开发的菜鸟,我不知道从哪里开始或搜索什么。
提前致谢
1 回答
因此,我可以想到几种方法来做到这一点,具体取决于您当前对应用程序的意图以及做您正在做的事情的原因。我将尝试在这里列出每个优点和缺点。我要再说一遍,对于一个新的 Web 开发人员来说,我认为没有什么是容易的。您的团队中是否有其他人在一种或两种技术方面有经验?
1) 可能是最简单的选择,如果可以的话,就是让 Node.js 进程成为网关。ASP.NET 应用程序根本不需要对用户进行身份验证,Node.js 应用程序充当 ASP.NET 应用程序的完整反向代理。如果您可以支持它,这很有效,并且您可以通过让 Node.js 应用程序登录到 ASP.Net 应用程序来保护它(通过您想要的任何方法;基本身份验证、表单登录等)。如果您需要 ASP.Net 应用程序知道当前上下文中的用户是什么,那么您可以将所需的任何信息推送到请求标头中(例如,如果它们共享相同的数据库,您可以输入 Id节点应用程序已通过身份验证的用户)。如果您希望 ASP.NET 应用程序可以单独访问,也可以通过节点应用程序访问,那么节点应用程序将成为众多用户和 asp.net 之一。net app 需要一个 HTTP 模块来规范用户信息是来自 Session 还是来自 Http 标头。最简单的方法是让 Http 模块检查当前用户是否具有给定角色(例如 NodeApp)并已登录,然后将用户信息从 HttpContext 复制到新的 Session 变量(即应用程序的其余部分使用),或者在数据库中查找代理用户并执行相同操作。基本上,应用程序的其余部分永远不会信任 HttpContext 的当前用户在那时做出决定。然后它将用户信息从 HttpContext 复制到一个新的 Session 变量(应用程序的其余部分使用),或者在数据库中查找代理用户并执行相同操作。基本上,应用程序的其余部分永远不会信任 HttpContext 的当前用户在那时做出决定。然后它将用户信息从 HttpContext 复制到一个新的 Session 变量(应用程序的其余部分使用),或者在数据库中查找代理用户并执行相同操作。基本上,应用程序的其余部分永远不会信任 HttpContext 的当前用户在那时做出决定。
Pro's:相当简单的架构,不依赖于每个应用程序所在的域。这两个应用程序都需要访问用户数据库才能正常工作。
缺点:如果由于某种原因应用程序无法访问同一个用户数据库,那就不好了。做代理有一些开销(不多,但仍然存在)。无论您是在谈论“真实”用户还是“节点”用户,您都需要保持头脑清醒。
2) OAuth(或 OpenID)是最符合标准的选项。在这种情况下,您需要将 Node.js 应用程序设置为 OAuth 提供者,并让 ASP.NET 应用程序成为 OAuth 使用者。然后,用户可以使用他们的 Node 用户名和密码登录,并让 Node 应用程序通过现有的身份验证模块将身份验证令牌传递给 ASP.NET 应用程序。
优点:在 ASP.NET 端编写的代码比上面的例子少,符合标准。如果您想稍后切换,您可以切换(或添加)OAuth 提供程序
缺点:为用户提供更多的间接性(在应用程序之间重定向)。这可能会被最小化,但您需要非常熟悉 OAuth 协议。
3) 会话共享(如果其他人对您这样做,则视为会话劫持......)。如果您在同一个域中,那么 Node.js 应用程序可以像 ASP.NET 一样简单地写出 ASP.NET 会话和身份验证 cookie。我说“简单”,但是您需要了解 ASP.NET 机制的许多细节才能正确执行。http://support.microsoft.com/kb/910443。主要的一点是你需要把你的 ASP.NET 会话存储放在一个数据库中,然后让 Node.js 管理从那里添加和删除元素,这样当 ASP.NET 去查看会话和身份验证 cookie 时对于给定的请求,它可以在它期望找到它们的地方找到它们,然后 ASP.NET 进程会在那里找到它们并采取相应的行动。
Pro's:使用在某种程度上已经存在的 ASP.NEt 机器 Con's:考虑到所有因素,可能非常脆弱。您的 node.js 应用程序需要访问 ASP.NEt 应用程序将用来解密会话内容的 machineKey。您需要确保使用相同的加密算法,并且两个应用程序将耦合到同一个会话存储。
4) 在 ASP.NET 中滚动您自己的成员资格提供程序,以向 Node 应用程序发出 Forms Auth 票证。这有点类似于 1 和 3 的混合。在此选项中,Node 应用程序在对用户进行身份验证后,将向 ASP.Net 服务器上的登录端点发送另一个请求,为其提供标识自己所需的凭据(例如以某种方式加密的共享密钥)。它还可以提供您想要的任何用户详细信息。然后,您可以在 ASP.NET 代码中手动调用 Forms Authentication api 为最终用户创建票证 ( http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx) 即不用自己计算;会话存储可以在任何地方。对 Node.js 应用程序的响应将包括身份验证 cookie 中的票证数据,因此您的 Node.js 应用程序可以将该数据通过管道传回给您的用户,以便下次他们向 ASP.nEt 应用程序发出请求时,他们'会有一个由 asp.net 生成的有效 auth cookie。
优点:从 ASP.NET 的角度来看,比 #3 更灵活,并且比 #1 更灵活。缺点:仍然需要在同一个域上的两个应用程序,仍然需要两者之间的大量集成。如果您搞砸了您的会员资格提供商,您可能会意外地在您的安全性中制造一个漏洞。
总的来说,我认为 OAuth 解决方案是最好的解决方案,但这些都是我能想到的所有方法。