2010-11-29 12 views
8

Mi aplicación es ruby-on-rails, pero espero que cualquier respuesta a esta pregunta sea independiente del marco.Almacenamiento de contraseñas para servicios de terceros

Mi aplicación envía mensajes de correo electrónico a través de SMTP Gmail utilizando rieles ActionMailers a-la:

mail = MyActionMailerSubclass.setup_email 

options = { :address   => "smtp.gmail.com", 
     :port     => 587, 
     :domain    => 'mydomain.com', 
     :user_name   => '[email protected]', 
     :password    => '[email protected]$w0rd', 
     :authentication  => 'plain', 
     :enable_starttls_auto => true } 

mail.delivery_method :smtp, options 
mail.deliver 

Ok, eso es genial ... no es mi contraseña para Gmail en texto plano en el código de la aplicación. O podría almacenarlo en la base de datos en texto plano. Obviamente, ambos son inaceptables.

Salting y hashing, la técnica habitual no funcionará aquí porque necesito enviar la contraseña a gmail.

Entonces, ¿qué estrategias hay para asegurar una contraseña para un servicio de terceros?

En última instancia, ese nombre de usuario y contraseña ni siquiera me pertenecen, pertenecerán al usuario final de la aplicación.

Respuesta

0

Si la aplicación es privada, esto no debe ser motivo de preocupación, pero supongo que es para una aplicación pública/de código abierto.

Si ese es el caso, entonces añadir un ejemplo básico de ese archivo como config/inicializadores/mail.rb.example y añadir la cosa real a su archivo .gitignore de modo que nunca ha cometido. Después de eso, agregue las instrucciones al README que las personas necesitarán copiar sobre el archivo mail.rb.example en mail.rb para que la aplicación funcione según lo previsto.

+0

Gracias Ryan, eso ayuda en el caso donde otros codificadores están involucrados. Mi verdadera preocupación es que el usuario final haga el correo electrónico desde su cuenta. Entonces necesito una forma para que ellos almacenen sus credenciales. – SooDesuNe

+0

Ese enfoque ayudará al OP a ocultar su * propia * contraseña de los usuarios de código abierto. Creo que lo que más le preocupa es que tendrá que almacenar * sus * contraseñas de usuarios en su servidor en texto plano, y no quiere la responsabilidad. – mgiuca

4

El servidor SMTP de Gmail admite dos mecanismos de autenticación: PLAIN y XOAUTH. El mecanismo PLAIN requiere que conozcas la contraseña de texto sin formato del usuario, y me alegra que no estés preparado para almacenarla.

Eche un vistazo al protocolo OAuth que usa Gmail. No lo he usado nunca y descubrí que Gmail lo soporta para SMTP, así que no puedo ayudarlo más, pero diría que eso es precisamente lo que quieres. OAuth es una forma de que un servicio (como Gmail) permita servicios de terceros (como el suyo) para realizar un conjunto limitado de acciones en nombre de los usuarios sin iniciar sesión con su contraseña.

Cuestiones relacionadas