首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过DDP (和SRP?)验证Meteor

通过DDP (和SRP?)验证Meteor
EN

Stack Overflow用户
提问于 2013-05-24 15:41:37
回答 3查看 6.4K关注 0票数 17

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-06 04:15:58

要通过DDP登录,只需发送一个方法调用。您可以根据您想要的登录方式对其稍作修改。

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

用户名是user_1,密码是qwerty (是的,我知道它是坏的),电子邮件地址是email@email.com,,登录令牌是MxNY9BFPKra2uNWG7

格式为

代码语言:javascript
复制
ddp call <method call name> [<param1>..]

这与在nodejs中做ddpclient.call(<method call name>,<param1>,callback)相同

使用电子邮件和密码登录的

代码语言:javascript
复制
ddp call 'login' '{"password":"qwerty","user":{"email":"email@email.com"}}'

使用用户名和密码登录的

代码语言:javascript
复制
ddp call 'login' '{"password":"qwerty","user":{"username":"user_1"}}'

使用 token 登录的(登录时meteor会保存什么内容

代码语言:javascript
复制
ddp call 'login' '{"resume":"MxNY9BFPKra2uNWG7"}'

--

难点: SRP

如果您不想像上面那样以纯文本方式发送密码,那么您没有使用SSL安全/https连接,您可以使用SRP。

使用SRP登录有点棘手,因为它有几个阶段

代码语言:javascript
复制
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:

-Begin a SRP密码交换:

代码语言:javascript
复制
ddp call 'beginPasswordExchange' '{"A":"A","user":{"email":"email@email.com"}}

响应将如下所示

代码语言:javascript
复制
{"identity":"identity","salt":"salt","B":B"}

然后,您可以使用此命令进行登录:

代码语言:javascript
复制
ddp call 'login' '{"srp":{"M":"srp hash"}}'

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

因此,要获得M和A的值,您需要一个SRP库。因为在meteor中有一个SRP库,所以很容易解释如何从每个库中获取密码,所以它相当棘手。如果您想用另一种语言编写方法,您可以使用wikipedia's explanation来构建方法

因此,我们开始一次srp交换(来自meteors SRP包中的SRP库),因为您使用的是node.js,所以您可以包含项目中的所有文件(除了package.js)。

代码语言:javascript
复制
var srp = new SRP.Client(password);

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

代码语言:javascript
复制
var response = srp.respondToChallenge(result);

这将最终给出使用'M‘的SHA哈希,接受'B’和盐。

最终

请不要忘记在登录时检查最终响应,以查看结果是否与预期结果匹配

代码语言:javascript
复制
srp.verifyConfirmation({HAMK: result.HAMK}

同样,这些都来自于流星的SRP库,但它们都是SRP规范的一部分,就像在wikipedia上一样。Meteor的SRP使用SHA256作为散列函数。

示例:

票数 35
EN

Stack Overflow用户

发布于 2015-08-18 20:25:41

A package现在正在执行登录部分,将loginWithPassowrd方法添加到DDP连接。

代码语言:javascript
复制
meteor add ongoworks:ddp-login

然后:

代码语言:javascript
复制
// Get the connection
var conn = DDP.connect(Meteor.absoluteUrl());

// Pass the connection to `DDP.loginWithPassword`, which is otherwise similar to
// the core `Meteor.loginWithPassword` method.
DDP.loginWithPassword(conn, {username: 'admin'}, 'admin', function (error) { ... })
票数 3
EN

Stack Overflow用户

发布于 2013-07-10 05:11:58

我找到的最接近的是这个,但它是在神秘的Objective-C :-P https://github.com/boundsj/ObjectiveDDP/blob/master/Example/Example/LoginViewController.m

它调用的函数是用C编写的:https://github.com/boundsj/ObjectiveDDP/blob/master/ObjectiveDDP/srp/srp.c

Meteor的SRP单元测试在这里:https://github.com/meteor/meteor/blob/master/packages/srp/srp_tests.js

Meteor srp的代码在这里:https://github.com/meteor/meteor/blob/master/packages/srp/srp.js

您至少需要这样:https://github.com/jedp/node-srp

祝好运。我正在试图弄清楚如何在Java中做到这一点,它比大多数加密方案更隐蔽。最难的部分是弄清楚Meteor是如何对身份进行编码的,但这是在Meteor srp代码中,因为它是Javascript,所以您可能可以将其提升:-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16729992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档