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

26
Sargis Koshkaryan 14 Май 2014 в 14:33

3 ответа

Лучший ответ

Как сказано в разделе 2.2 платформы авторизации OAuth 2.0:

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

Размер строки идентификатора клиента не определен данной спецификацией. Клиент должен избегать предположений о размере идентификатора. Серверу авторизации СЛЕДУЕТ задокументировать размер любого выдаваемого им идентификатора.

Таким образом, вы можете сами определить идентификатор клиента. Это зависит от вашего выбора. Вы можете использовать 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 + что-то еще, чтобы реализовать это самостоятельно.

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

30
ztirom 12 Дек 2015 в 18:56

Вот код для создания ключа ClientSecret в PowerShell.

$bytes = New-Object Byte[] 32
$rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rand.GetBytes($bytes)
$rand.Dispose()
$newClientSecret = [System.Convert]::ToBase64String($bytes)
$newClientSecret

Я нашел его здесь https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/replace-an-expiring-client-secret -in-a-sharepoint-add-in # generate-a-new-secret

5
Philippe 20 Ноя 2017 в 02:39

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

VSCHAR     = %x20-7E

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

3
Community 23 Май 2017 в 12:02