authentication - 通过 DDP(和 SRP?)使用 Meteor 进行身份验证

标签 authentication meteor

我似乎找不到任何关于如何使用 Meteor 的 DDP 对用户进行身份验证的好信息。

这可能吗?如果是这样,最好的方法是什么?如何使用 SRP 远程登录 Meteor?

我目前正在使用直接节点(最终将使用 Express),以及 this node ddp client .

最佳答案

要通过 DDP 登录,只需发送一个方法调用。您可以根据您想要登录的方式稍微更改它。
我将使用 ddp-tools尝试解释如何登录,因为它将与纯粹的 ddp 进行通信。以下示例中的登录详细信息是
用户名是 user_1 ,密码是 qwerty (是的,我知道它不好),电子邮件地址是 email@email.com ,登录 token 为 MxNY9BFPKra2uNWG7
格式是

ddp call <method call name> [<param1>..]
这与执行 ddpclient.call(<method call name>,<param1>,callback) 相同在nodejs中
使用电子邮件和密码登录
ddp call 'login' '{"password":"qwerty","user":{"email":"email@email.com"}}'
使用用户名和密码登录
ddp call 'login' '{"password":"qwerty","user":{"username":"user_1"}}'
使用 token 登录(登录时 meteor 保存的内容 :
ddp call 'login' '{"resume":"MxNY9BFPKra2uNWG7"}'
--
难点:SRP
如果您不想像上述方式那样以纯文本形式发送密码,那么您没有使用 SSL 安全/https 连接,您可以使用 SRP。
使用 SRP 登录有点棘手,因为它有几个阶段
1. Begin a passwordExchange to establish the key to communicate the hash
2. Send a login call with the hash calculated using the reply from 1)
第1步:
- 开始 SRP 密码交换:
ddp call 'beginPasswordExchange' '{"A":"A","user":{"email":"email@email.com"}}
响应将类似于
{"identity":"identity","salt":"salt","B":B"}
然后你可以使用它来登录:
ddp call 'login' '{"srp":{"M":"srp hash"}}'
同样,您可以使用用户名而不是上面的电子邮件。
因此,要获得 M 和 A 的值,您需要一个 SRP 库。由于 meteor 中有一个 SRP 库,因此很容易解释如何从每个库中获取密码,这非常棘手。如果你想用另一种语言写一个,你可以使用 wikipedia's explanation建立方法
所以我们开始一个 srp 交换(来自 meteor SRP 包中的 SRP 库),因为您使用的是 node.js,所以您可以在项目中包含所有文件(package.js 除外)
var srp = new SRP.Client(password);
这会给你A ,然后您将获得可以响应的数据:
var response = srp.respondToChallenge(result);
这最终将为您提供 SHA 哈希以使用“M”进行回复,并使用“B”和盐。
最后
登录时不要忘记检查最终响应,以查看结果是否与应有的相符
srp.verifyConfirmation({HAMK: result.HAMK}
同样,这些都来自 Meteor 中的 SRP 库,但它们都是 SRP 规范的一部分,如 wikipedia . Meteor 的 SRP 使用 SHA256 作为散列函数。
例子:
  • 节点 JS - https://github.com/emgee3/srp-test
  • 关于authentication - 通过 DDP(和 SRP?)使用 Meteor 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16729992/

    相关文章:

    python - 带有谷歌身份工具包的谷歌云端点

    authentication - 允许在网站上进行匿名/未经身份验证投票的编程策略

    javascript - 单个页面中的多个 Dropzone

    javascript - 从 meteor 外部位置获取图像

    ios - iOS objective-c 中登录的唯一 ID

    长时间运行的应用程序的 WCF 身份验证 session

    c# - 如何使用 linq 验证用户名/密码?

    javascript - 将空格键参数传递给另一个空格键参数

    javascript - 在 Meteor 应用程序中使用 Disqus/reCaptcha

    javascript - 在哪里可以使用 Meteor http 将 POST 数据传递到 api?