2015-05-05 2 views
1

Я создаю мобильное приложение, использующее Google App Engine (python) для бэкэнд. Пользователи регистрируются в приложении Twitter, а токен и секрет аутентификации передаются на бэкэнд (более https), чтобы сервер мог аутентифицироваться с помощью Twitter, а также периодически синхронизировать друзей и последователей в фоновом задании. Поскольку они используются фоновым потоком, я хочу сохранить информацию в хранилище данных, чтобы их можно было восстановить и использовать позже.Как безопасно хранить внешние учетные данные в Google App Engine

Прямо сейчас, во время разработки и тестирования, я просто помещал их в хранилище в виде обычного текста. Но я хотел бы добавить немного больше безопасности, сохраняя его зашифрованным и расшифровывая его, когда это необходимо. Спасибо за любую помощь!

Для общих паролей учетных записей, я использую

security.generate_password_hash(raw_password, length=12) 

основан на том, как webapp2_extras хранит пароли. Но этот подход не позволил бы мне получить данные. Есть ли что-то подобное, что позволяет шифровать и расшифровывать?

+0

Пока не ответ на вопрос, как первоначально поставленные, я думаю, самое безопасное решение пересмотреть эту проблему и на самом деле не полагаться на выборку, что данные из хранилища данных. Я могу начать синхронизацию друга/последователя при каждом повторном входе пользователя (с некоторыми дополнительными условиями, чтобы не делать этого при каждом входе в систему). Пользователь во время входа в систему будет предоставлять свой токен аутентификации twitter и секрет аутентификации, и я могу передать это непосредственно на нужную им задачу. –

+0

О, и если я хочу сохранить свои учетные данные twitter для повторной авторизации пользователя без подтверждения учетных данных с помощью твиттера, я могу рассматривать как auth_token, так и auth_secret как пароли в хранилище данных и проверять предоставленные пользователем значения против них. (И подтвердите с Twitter, если только что предоставленные учетные данные не соответствуют тому, что кэшируется в хранилище данных) –

ответ

0

Обычно для хранения паролей вы использовали однонаправленную (одностороннюю) технологию шифрования, чтобы никто не мог определить, что такое пароль, а затем взять предоставленные пользователем значения и сравнить их с сохраненными значениями. Таким образом, вы никогда не храните фактический пароль, и его вряд ли украдут.

Что вы ищете, это метод двунаправленного шифрования, посредством которого вы предоставляете значение и ключ для создания зашифрованного значения и можете применить ключ к зашифрованному значению для получения оригинала.

Вы не указали, какой язык вы используете, поэтому я не могу представить хороший пример, однако я предлагаю взглянуть на такие методы, как AES. Пожалуйста, имейте в виду, что если вы выберете метод шифрования с помощью короткого ключа, будет намного проще использовать грубую силу. Любое шифрование, которое является двунаправленным, подвержено риску более простой грубой силы и после определения ключа. Все пароли подвержены риску дешифрования. Большинство языков имеют некоторую поддержку AES и аналогичные методы шифрования.

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

Подробнее здесь: http://en.wikipedia.org/wiki/Advanced_Encryption_Standard

+0

Спасибо! Я начну рассматривать AES для этого. Я буду использовать разные ключи для этого подхода и ключи, используемые для хэширования паролей. Я использую python кстати. Случайно, у вас возникли бы какие-либо примеры для python в Google App Engine? –

+0

У меня нет реализации Python AES, которая была протестирована и подтверждена при работе с App Engine, однако, когда я смотрел на нее, я использовал библиотеку шифрования Python, которая была очень простой. Я ожидаю, что если вы сможете импортировать подобную библиотеку, тогда вы сможете добиться тех же результатов. –

+0

Хорошо, спасибо в любом случае.Похоже, GAE-python поддерживает pycrypto, и ответ, вероятно, где-то там. –

Смежные вопросы