Как сгенерировать идентификатор клиента и секретный код OAuth 2

Я хочу сгенерировать идентификатор клиента и клиентский секрет с помощью .NET. Я прочитал спецификацию OAuth 2 и, например, размер секретности клиента там не указан. Есть ли хорошая практика для генерации идентификатора клиента и секретности клиента с использованием .NET framework?

Ответы

Ответ 1

Как раздел 2.2 Отладочной платформы OAuth 2.0 говорит:

Сервер авторизации выдает зарегистрированному клиенту клиент    идентификатор - уникальная строка, представляющая регистрацию    информация, предоставленная клиентом. Идентификатор клиента не является    секрет; он предоставляется владельцу ресурса и НЕ ДОЛЖЕН использоваться    для проверки подлинности клиента. Идентификатор клиента уникален для    сервер авторизации.

Размер строки идентификатора клиента остается undefined этим    Спецификация. Клиент должен избегать предположений о    размер идентификатора. Сервер авторизации ДОЛЖЕН документировать размер    любого его идентификатора.

Таким образом, вы можете определить идентификатор клиента самостоятельно. Это зависит от вашего выбора. Вы можете использовать System.Guid для генерации одного просто или использовать uid + systemTime, также вы можете Хешировать его, зашифровывать или что угодно, что хотите.

Но секрет клиента должен быть криптографически сильной случайной строкой. Вы можете создать такой файл:

RandomNumberGenerator cryptoRandomDataGenerator = new RNGCryptoServiceProvider();
byte[] buffer = new byte[length];
cryptoRandomDataGenerator.GetBytes(buffer);
string uniq = Convert.ToBase64String(buffer);
return uniq;

Также вы можете использовать криптографические хеш-функции() для хэша UUID + SystemTime + somthingelse, чтобы реализовать его самостоятельно.

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

Ответ 2

приложения A.1 и A.2 определяют формат как для client_id, так и client_secret в их грамматике ABNF как *VSCHAR где VSCHAR определяется как

VSCHAR     = %x20-7E

означает набор печатаемых символов ASCII. Длина client_id не указана спецификацией, а отмечена @Owen Tsao. Это означает, что, хотя вы можете выбрать случайную последовательность байтов и закодировать их в base64, набор символов, которые появляются в base64, представляет собой только строгий подмножество доступных для использования в этом приложении.