2012-01-20 1 views
8

Я реализую провайдера OAuth2, и я хотел бы иметь область где-то на своем веб-сайте, где разработчики регистрируются и регистрируют сторонние приложения. Но у меня возникают сомнения в том, как создавать клиентский идентификатор приложений и секрет клиента. Должны ли они быть уникальными случайными кодами или они должны иметь какую-то значимую информацию для клиента? Думаю, они могут быть случайными.Как создать идентификатор клиента OAuth и секрет клиента?

Ну, я искал лучшие практики, как это сделать, но так и не нашел. Поэтому любые ответы будут оценены.

PD: Im, развивающийся на .NET MVC3 с библиотекой, называемой DotNetOpenAuth.

ответ

15

Идентификатор клиента может быть любым, что вы хотите. Это может быть их выбор или любая случайная строка.

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

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

, но этот код гарантирует, что строка будет уникальной? – Daniel

+0

Нет. Но секрет клиента не обязательно должен быть уникальным. Должен быть только идентификатор клиента. Кроме того, учитывая достаточно длинную длину в приведенном выше примере кода (скажем, 32+), статистически * очень маловероятно, что будут созданы два одинаковых кода. –

+0

Что вы рекомендуете для секретов? – davidbitton

2

В спецификациях не ясно, как вы должны их генерировать, но они говорят, что вы должны быть случайными строками и уникальными.

В section #2.2, о идентификаторе клиента:

Сервер авторизации выдает зарегистрированный клиент клиент идентификатора - это уникальная строка, представляющей регистрационной информации, предоставленной клиентом.

+0

Уникально да, но спецификации не волнует, являются ли они «случайными». –