Как сайты разработчиков, такие как Facebook, Dropbox или Twitter, генерируют идентификатор приложения?

Я работаю над платформой для разработчиков, которая должна генерировать идентификатор приложения, когда разработчик регистрирует свои приложения для использования нашей платформы, с сайтов, таких как FB, dropbox и т. Д., Общие шаги: указать имя приложения, определяемое разработчиком, некоторую конфигурацию разрешений для новое приложение, а затем оно сгенерирует уникальный идентификатор приложения и секретный ключ приложения.

У меня вопрос, как они это реализуют, как алгоритм, механизм, лучшие практики и так далее? Любая помощь и детали будут с благодарностью!

1 ответ

Решение

Идентификаторы приложений обычно представляют собой большие числа или последовательность случайно сгенерированных буквенно-цифровых символов. Например, Twitter использует последовательность из 22 буквенно-цифровых символов. Идентификаторы приложений не являются секретными, так как вам часто требуется помещать их в код клиента для выполнения вызовов API. Вы можете создать один, используя ваш язык по вашему выбору. Посмотрите этот однострочный в Python, например:

import random, string
app_id = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(20)) # 20 being the size of the App ID you're wanting

Секретные ключи, с другой стороны, являются уникальными идентификаторами или очень длинными строками, которые невозможно угадать. Они не являются публичными и никогда не должны быть общедоступными (например, в коде JavaScript). Это не означает, что вы должны использовать сложный алгоритм для их генерации. UUID (или GUID, в зависимости от того, как вам нравится это называть) здесь вполне допустим, но для дополнительной безопасности вы можете захотеть надежно сохранить их в своей базе данных (например, зашифрованную), на случай, если злоумышленник ее сбросит. Опять же, в Python все сводится к этим двум строкам:

import uuid
secret_key = uuid.uuid1()

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

Таким образом, сложная часть заключается не в том, чтобы генерировать идентификаторы приложений или секретные ключи, а в том, чтобы писать безопасный код, чтобы убедиться, что вы общаетесь с нужным разработчиком:) Чтобы получить вдохновение, взгляните (вы, кажется, уже начали это делать) на известные API, такие как Facebook, Twitter, LinkedIn или Google+, чтобы увидеть, как "большие" справляются с такой проблемой.

Другие вопросы по тегам