【问题标题】:calling CryptProtectData function from javascript or vbscript从 javascript 或 vbscript 调用 CryptProtectData 函数
【发布时间】:2012-02-01 09:11:48
【问题描述】:

我正在创建一个站点,用户可以在其中保存不同的凭据,并且在登录到 VM 时,他们可以简单地选择使用特定凭据登录。因此,我必须生成一个包含所选用户名/密码的 rdp 文件。这很好,但问题是 rdp 文件中的密码需要使用 crypt32.dll 中的 CryptProtectData 函数进行加密。这可以毫不费力地完成,但问题是文件只能在创建它的那台计算机上解密。

因此,即使我即时创建了一个 rdp 文件并将其发送给客户,他们也无法打开它,因为它不是在他们的机器上创建的。所以,我必须以某种方式从客户端加密密码并生成 rdp 文件。但是我不知道如何从客户端调用 COM 对象的函数。

请帮忙。

【问题讨论】:

  • 你能解释一下你的设置吗?例如。你能在用户的机器上安装软件吗?他们都有自己的密码还是共享密码?为什么他们用不同的用户名连接到同一台机器?
  • 嗨 Ben,问题是我有一个网站,允许用户登录到不同的虚拟机。现在他们需要在同一台机器上使用不同的凭据,因为有时他们需要以管理员身份登录,有时需要以用户等身份登录。
  • 不,这不是重复的,因为我想从客户端创建 rdp 文件,链接说从服务器端创建它。
  • 可以在用户的​​机器上安装软件吗?什么是“等”?他们必须登录的不仅仅是管理员和一个用户吗?

标签: javascript com vbscript rdp


【解决方案1】:

解决方案是不要这样做。相反,生成没有密码的 RDP 文件,并训练用户选中复选框以将凭据保存在他们的计算机上。

设置prompt for credentials:i:0,第一次会提示用户输入用户名和密码。他们将有机会选中一个框以保存凭据,并且不会在以后再次询问。

请注意,您不能从浏览器中调用 CryptProtectData。如果你不能在用户的机器上安装软件,或者让用户去做,你根本就不能这样做。

以前有执行此操作的功能,但在 XPSP2 和 2003SP1 中已删除。

【讨论】:

  • 不,这不是解决方案,因为这是一个网站。因此,用户将从不同的机器登录。此外,他们需要使用不同的凭据登录同一台机器。保存凭据意味着他们必须在必须更改用户名时再次更改用户名。