Хранение паролей для сторонних сервисов - PullRequest
8 голосов
/ 29 ноября 2010

Мое приложение - ruby-on-rails, но я ожидаю, что любые ответы на этот вопрос, вероятно, не будут зависеть от фреймворка.

Мое приложение отправляет электронные письма через SMTP gmail с помощью rails ActionMailers а-ля:

mail = MyActionMailerSubclass.setup_email

options = { :address          => "smtp.gmail.com",
        :port                 => 587,
        :domain               => 'mydomain.com',
        :user_name            => 'myuser@mydomain.com',
        :password             => 's3cur3p@s$w0rd',
        :authentication       => 'plain',
        :enable_starttls_auto => true  }

mail.delivery_method :smtp, options
mail.deliver

Хорошо, это здорово ... в коде приложения есть мой пароль для gmail в виде обычного текста. Или я мог бы сохранить его в базе данных в виде простого текста. Очевидно, что оба недопустимы.

Соль и хеширование, обычная техника здесь не сработает, потому что мне нужно отправить пароль в gmail.

Итак, какие существуют стратегии для защиты пароля для стороннего сервиса?

В конечном счете, имя пользователя и пароль даже не принадлежат мне, они будут принадлежать конечному пользователю приложения.

Ответы [ 2 ]

4 голосов
/ 29 ноября 2010

SMTP-сервер Gmail поддерживает два механизма аутентификации: PLAIN и XOAUTH.Механизм PLAIN требует, чтобы вы знали незашифрованный пароль пользователя, и я рад, что вы не готовы его хранить.

Взгляните на протокол OAuth , используемый Gmail.Я никогда не использовал его, и я только что узнал, что Gmail поддерживает его для SMTP, поэтому я больше не могу помочь, но я бы сказал, что это именно то, что вы хотите.OAuth - это способ, с помощью которого служба (например, Gmail) позволяет сторонним службам (таким как ваша) выполнять ограниченный набор действий от имени пользователей без входа в систему со своим паролем.

0 голосов
/ 29 ноября 2010

Если приложение является частным, то это не должно вызывать беспокойства, но я предполагаю, что оно предназначено для приложения с открытым исходным кодом.

Если это так, добавьте базовый пример этогоподайте файл config / initializers / mail.rb.example и добавьте реальную вещь в ваш файл .gitignore , чтобы он никогда не фиксировался.После этого добавьте инструкции к README , которые люди должны будут скопировать в файл mail.rb.example в mail.rb , чтобы приложениеработать по назначению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...