通过DDP(和SRP?)通过Meteor进行身份验证

gko*_*ger 17 authentication meteor

我似乎无法找到有关如何使用Meteor的DDP验证用户的任何好信息.

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

我目前正在使用直接节点(最终将使用Express),以及此节点ddp客户端.

Aks*_*hat 35

要通过DDP登录,只需发送方法调用即可.根据您的登录方式稍微改变它.

我将使用ddp-tools尝试解释如何登录,因为它将与纯ddp进行通信.以下示例中的登录详细信息为

用户名USER_1,密码QWERTY键盘(是的,我知道它的坏的),以及电子邮件地址email@email.com,在登录令牌MxNY9BFPKra2uNWG7

格式是

ddp call <method call name> [<param1>..]
Run Code Online (Sandbox Code Playgroud)

这与ddpclient.call(<method call name>,<param1>,callback)在nodejs中执行的操作相同

使用电子邮件和密码登录

ddp call 'login' '{"password":"qwerty","user":{"email":"email@email.com"}}'
Run Code Online (Sandbox Code Playgroud)

使用用户名和密码登录

ddp call 'login' '{"password":"qwerty","user":{"username":"user_1"}}'
Run Code Online (Sandbox Code Playgroud)

使用令牌登录(登录时meteor保存的内容:

ddp call 'login' '{"resume":"MxNY9BFPKra2uNWG7"}'
Run Code Online (Sandbox Code Playgroud)

-

困难的一个: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)
Run Code Online (Sandbox Code Playgroud)

步骤1:

- 开始SRP密码交换:

ddp call 'beginPasswordExchange' '{"A":"A","user":{"email":"email@email.com"}}
Run Code Online (Sandbox Code Playgroud)

回应将是这样的

{"identity":"identity","salt":"salt","B":B"}
Run Code Online (Sandbox Code Playgroud)

然后你可以用它来登录:

ddp call 'login' '{"srp":{"M":"srp hash"}}'
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用用户名而不是上面的电子邮件.

因此,要获得M和A的值,您需要一个SRP库.由于流星中有一个SRP库,因此很容易解释如何从每个中获取密码,这非常棘手.如果你想用另一种语言写一个,你可以使用维基百科的解释来构建方法

所以我们开始一个srp交换(来自流星SRP包中的SRP库),因为你使用的是node.js,你可以包含项目中的所有文件(package.js除外)

var srp = new SRP.Client(password);
Run Code Online (Sandbox Code Playgroud)

这将为您提供A,然后您将获得可以回复的数据:

var response = srp.respondToChallenge(result);
Run Code Online (Sandbox Code Playgroud)

这将最终为您提供SHA哈希回复使用'M',接收'B'和盐.

最后

登录时不要忘记检查最终响应,以查看结果是否与应有的结果相符

srp.verifyConfirmation({HAMK: result.HAMK}
Run Code Online (Sandbox Code Playgroud)

这些都来自Meteor的SRP库,但它们都是维基百科上的SRP规范的一部分.Meteor的SRP使用SHA256作为散列函数.

例子: