Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 通过DDP(和SRP?)_Authentication_Meteor - Fatal编程技术网

Authentication 通过DDP(和SRP?)

Authentication 通过DDP(和SRP?),authentication,meteor,Authentication,Meteor,我似乎找不到任何关于如何使用Meteor的DDP对用户进行身份验证的好信息 这可能吗?如果是,最好的方法是什么?如何使用SRP远程登录Meteor 我目前正在使用straight Node(最终将使用Express)以及。我发现最接近的是这个,但它位于神秘的Objective-C:-p中 它调用的函数是C语言的: Meteor的SRP单元测试如下: Meteor srp代码如下: 您至少需要以下内容: 祝你好运。我正试图弄清楚如何在Java中实现这一点,它比大多数加密方案更神秘。最困难

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

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


我目前正在使用straight Node(最终将使用Express)以及。

我发现最接近的是这个,但它位于神秘的Objective-C:-p中

它调用的函数是C语言的:

Meteor的SRP单元测试如下:

Meteor srp代码如下:

您至少需要以下内容:


祝你好运。我正试图弄清楚如何在Java中实现这一点,它比大多数加密方案更神秘。最困难的部分是弄清楚Meteor是如何编码身份的,但这是Meteor srp代码中的代码,您可能可以使用它,因为它是Javascript:-)

要通过DDP登录,只需发送一个方法调用。您可以根据登录方式对其进行轻微更改

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

用户名是user\u 1,密码是qwerty(是的,我知道它不好),电子邮件地址是email@email.com,登录令牌为MxNY9BFPKra2uNWG7

格式是

ddp call <method call name> [<param1>..]
使用用户名和密码登录

ddp call 'login' '{"password":"qwerty","user":{"email":"email@email.com"}}'
ddp call 'login' '{"password":"qwerty","user":{"username":"user_1"}}'
使用令牌登录(当您登录时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库,因此很容易解释如何从每个SRP库中获取密码,这相当棘手。如果您想用另一种语言编写一个SRP库,您可以使用它来构建方法

因此,我们开始一个srp交换(从meteors srp包中的srp库开始),因为您使用的是node.js,所以您可以在项目中包含所有文件(package.js除外)

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

var response = srp.respondToChallenge(result);
这将最终为您提供SHA哈希,以使用“M”进行回复,同时使用“B”和盐

最后

当您登录时,不要忘记检查最终响应,以查看结果是否与应该的结果相匹配

srp.verifyConfirmation({HAMK: result.HAMK}
同样,这些都来自Meteor中的SRP库,但它们都是上的SRP规范的一部分。Meteor的SRP使用SHA256作为散列函数

示例:
  • 节点JS-
正在执行登录部分,向DDP连接添加loginWithPassowrd方法

meteor add ongoworks:ddp-login
然后:


我在节点中的DDP上使用了SRP身份验证,如果有人感兴趣,请在此处编写代码:@emgee干得好!我已经更改了答案以包含您的链接。不再相关,Meteor删除了SRP。@Mário SRP仍然可以在项目中使用。它还没有完全删除。@Mário我目前在Meteor 1.1.0.2上使用它。它的所有功能都是
SRP
secti在密码下,它可以与bcrypt一起工作。添加散列不需要太多努力。任何第三方ddp连接仍然可以使用srp提供的安全bump。bcrypt的理由更多的是为了更容易与第三方兼容,正如您提供链接的文档所述,因为使用srp有困难。但它不会阻止任何人使用srp今天与bcrypt一起使用srp的rom。
meteor add ongoworks:ddp-login
// 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) { ... })