users remove password currentuser create change authentication meteor

authentication - remove - meteor user id



Autenticación con Meteor a través de DDP(y SRP?) (3)

Parece que no puedo encontrar ninguna buena información sobre cómo autenticar a un usuario utilizando el DDP de Meteor.

es posible? Si es así, ¿cuál es la mejor manera de hacerlo? ¿Cómo se puede iniciar sesión de forma remota en Meteor utilizando SRP?

Actualmente estoy usando Nodo directo (eventualmente usaré Express), junto con este cliente ddp de nodo .


Lo más cercano que he encontrado es esto, pero está en el críptico Objective-C :-P https://github.com/boundsj/ObjectiveDDP/blob/master/Example/Example/LoginViewController.m

Las funciones a las que llama están en C aunque: https://github.com/boundsj/ObjectiveDDP/blob/master/ObjectiveDDP/srp/srp.c

Y la prueba de unidad SRP de Meteor está aquí: https://github.com/meteor/meteor/blob/master/packages/srp/srp_tests.js

y el código srp de Meteor está aquí: https://github.com/meteor/meteor/blob/master/packages/srp/srp.js

Necesitará al menos esto: https://github.com/jedp/node-srp

Buena suerte. Estoy intentando descubrir cómo hacer esto en Java y es más críptico que la mayoría de los esquemas de encriptación. La parte más difícil es descubrir cómo Meteor codifica la identidad, pero eso está en el código srp de Meteor que probablemente puedes levantar ya que está en Javascript :-)


Para iniciar sesión a través de DDP, simplemente envíe un método de llamada. Lo modificas ligeramente dependiendo de cómo quieras iniciar sesión.

ddp-tools para intentar explicar cómo iniciar sesión, ya que se comunicaría con puramente ddp. Los detalles de inicio de sesión en los ejemplos a continuación son

El nombre de usuario es user_1 , la contraseña es qwerty (sí, sé que es mala) y la dirección de correo electrónico es [email protected] , el token de inicio de sesión es MxNY9BFPKra2uNWG7

El formato es

ddp call <method call name> [<param1>..]

Que es lo mismo que hacer ddpclient.call(<method call name>,<param1>,callback) en nodejs

Para iniciar sesión con correo electrónico y contraseña

ddp call ''login'' ''{"password":"qwerty","user":{"email":"[email protected]"}}''

Para iniciar sesión con un nombre de usuario y contraseña

ddp call ''login'' ''{"password":"qwerty","user":{"username":"user_1"}}''

Para iniciar sesión con un token (qué meteorito guarda al iniciar sesión :

ddp call ''login'' ''{"resume":"MxNY9BFPKra2uNWG7"}''

-

El difícil: SRP

Si no desea enviar la contraseña en texto sin formato como en la forma anterior, no está utilizando una conexión SSL segura / https, puede usar SRP.

Para iniciar sesión con SRP es un poco complicado ya que tiene un par de etapas

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)

Paso 1:

-Empieza un intercambio de contraseña SRP:

ddp call ''beginPasswordExchange'' ''{"A":"A","user":{"email":"[email protected]"}}

La respuesta será algo así como

{"identity":"identity","salt":"salt","B":B"}

Luego puedes usar esto para iniciar sesión:

ddp call ''login'' ''{"srp":{"M":"srp hash"}}''

Del mismo modo, puede utilizar el nombre de usuario en lugar del correo electrónico anterior.

Entonces, para obtener los valores de M y A, necesitas una biblioteca de SRP. Ya que hay una biblioteca de SRP en meteor, es fácil explicar cómo obtener la contraseña de cada uno, es bastante complicado. Si desea escribir uno en otro idioma, puede utilizar la explicación de wikipedia para desarrollar los métodos.

Así que comenzamos un intercambio de srp (desde la biblioteca SRP en el paquete SRP de meteors), ya que estás usando node.js, puedes incluir todos los archivos en tu proyecto (excepto package.js)

var srp = new SRP.Client(password);

Esto le dará una A , luego obtendrá datos que puede responder con:

var response = srp.respondToChallenge(result);

Esto finalmente le dará el hash SHA para responder usando ''M'', tomando ''B'' y la sal.

Finalmente

No olvide revisar la respuesta final cuando inicie sesión para ver si el resultado coincide con lo que debería ser

srp.verifyConfirmation({HAMK: result.HAMK}

Nuevamente, estos son todos de la biblioteca SRP en Meteor, pero todos son parte de la especificación SRP como en wikipedia . El SRP de Meteor utiliza SHA256 como función de hash.

Ejemplos:


Un paquete está ahora haciendo la parte de inicio de sesión, agregando un método loginWithPassowrd a la conexión DDP.

meteor add ongoworks:ddp-login

Entonces:

// 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) { ... })