当前位置: 首页 > 知识库问答 >
问题:

存储登录到第三方API的密码

鲁望
2023-03-14

我正在使用Node编写一个交易应用程序

有问题的经纪账户有一个REST API,您可以在其中发布该系统的登录名和密码。该API不提供SSO或OAuth作为身份验证选项。身份验证的唯一方法是发布uid和密码。

所以这里涉及到两个登录:一个是我的应用程序,另一个是完全独立的经纪账户登录。每个登录都使用不同的用户ID和密码。

我遇到的问题是如何存储经纪账户的密码。我知道存储密码是个坏主意。但是,如果我存储的全部是经纪密码的盐渍哈希,我将无法逆转并获得实际密码。因此,除非用户再次输入密码,否则我的应用程序将无法登录到经纪账户。

(顺便说一句,还有另一个程序这样做。https://dough.com要求用户登录到面团,然后你也必须登录到TD Ameritrade。登录两次是我希望避免的。)

是否有一种合理且安全的方法来存储此第三方API的密码,以便我的应用程序可以代表用户登录,而无需在用户每次使用我的应用程序时强制用户提交密码?我知道这里有很大的安全风险。如果答案是否定的,那么我不会。

共有2个答案

吴俊风
2023-03-14

我认为你有几个选择,你选择的决定应该取决于你想冒的风险。如果是你暗示的财务数据,我认为这个决定显然不应该做这些。

一个选项是将第三方API密码存储在服务器上,该密码使用从用户本地密码派生的密钥加密。由于您不存储用户的本地密码,您只能在用户登录时解密第三方应用编程接口密码,当您有他的本地密码时,如果您想将来调用模拟用户的应用编程接口,您必须保留明文服务器内存(用户会话)中第三方密码的版本。我认为,虽然在某些应用中,这可能是一个可行的选择,但对于金融数据来说,这是不可接受的。

您可以做的另一件事是用Javascript加密第三方API密码,如Dave Lasley在回答中所述。虽然这可以奏效,但它增加了很多复杂性,正如他还指出的那样,实施将是关键。在不引入漏洞的情况下,很难做到这一点并随着时间的推移进行维护。Javascript加密也有它的问题,最好的做法是不要在Javascript中进行加密。您必须将第三方API密码保存在Javascript内存中,这是一个非常弱的控件,任何单个XSS都可以从那里窃取密码(任何其他浏览器存储甚至比内存中的Javascript对象更糟糕)。此外,第三方API还需要从您的域(或*显然)支持CORS。

我的看法是,要做到这一点,唯一好的方法就是仔细地使用OAuth2实现。如果API不支持这一点,那么很遗憾,您根本不应该这样做。

鱼浩荡
2023-03-14

编辑

是的,有,但这并不容易

为了使系统更加安全,您的后端无法解密密码。这就是JS库的用武之地,它通过浏览器提供PGP加密。

您可以根据用户密码设置PGP密码,或使其提供新密码进行解密。或者,您可以为密码加密生成随机密钥,然后创建一个可以访问随机密钥的主密钥—使用用户输入对主密钥进行加密。

无论使用哪种方法,您都需要让他们输入密码,以便在需要时解密记录,或者将他们的密码添加到他们的本地会话中。前者是安全的,后者具有明显的安全含义。

使用示例提供的密码进行简单字符串加密:

var options, encrypted;

options = {
    data: 'Hello, World!',      // input as String
    passwords: ['secret stuff'] // multiple passwords possible
};

openpgp.encrypt(options).then(function(ciphertext) {
    encrypted = ciphertext.data; // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
});

解密:

options = {
    message: openpgp.message.readArmored(encrypted), // parse armored message
    password: 'secret stuff'                         // decrypt with password
};

openpgp.decrypt(options).then(function(plaintext) {
    return plaintext.data; // 'Hello, World!'
});
 类似资料:
  • 读取用户登陆信息 调用地址 https://secure.bilibili.tv/login 参数 字段 必选 类型 说明 api true string 申请时填入的API地址 appkey true string 申请时系统提供的Key sign true string 校验密钥 md5(“api=“) 回调 编码为UTF-8 返回值字段 字段类型 字段说明 mid int 会员编号 unam

  • 1.如何获取APPID和APPSECRET这两个参数? 1.需登录微信开放平台配置,具体可参考使用手册。 2.申请QQ互联申请链接 2.升级以后,微信浏览底部图标不显示,应该检查哪里? 后台店铺手机端底部导航设置

  • 本文向大家介绍Vue.js中Line第三方登录api的实现代码,包括了Vue.js中Line第三方登录api的实现代码的使用技巧和注意事项,需要的朋友参考一下 国际化的项目就会用用到一些第三方的登录api,这次记录一下Line 的! 按步骤来: 注册Line账号就不说了,虽然麻烦,这就自己去想办法了! demo 请狠狠的戳这里 http://download.lllomh.com/cliect/#

  • 我正试图通过一个第三方库登录我的meteor站点,比如下面的库:https://gist.github.com/gabrielhpugliese/4188927 在server.js中,我有: PS.在服务器端,users集合看起来很好。流星令牌和其他一切都在那里。

  • 对于用户而言,注册账号密码是一件非常麻烦的事情,不但注册过程繁琐且花时间,同时也提高了用户的账号维护成本。因此如果网站能够提供第三方登录,让用户能够直接复用一些现有且常用的网站账号,将能够大大提高用户体验。 接入第三方登录 API 一些大型的站点平台都会开放相应的第三方登录接口和说明文档,如国内的有: 百度账号接入指南:http://developer.baidu.com 新浪微博接入指南:htt

  • 第一步,商城启用微信前台登陆,需要在Niushop商城后台设置->基础设置->第三方登陆,进入到微信配置界面。 我们可以看见需要配置APPID和APPSECRET,如何获取这两个参数? 第二步,登录微信开放平台,找到管理中心->网站应用->创建网站应用, 按照流程,填写基本信息->填写网站信息->提交成功,等待审核即可。 注意:填写回调域名只需填写网站域名即可。 第三步,在网站应用 查看申请应用的