2012-01-20 15 views
8

私はOAuth2プロバイダを実装しています。私は、開発者がログオンしてサードパーティのアプリケーションを登録する私のウェブサイトのどこかに領域を持たせたいと考えています。しかし、私はアプリのクライアント識別子とクライアントの秘密を生成する方法に疑問を抱いています。固有のランダムコードであるか、またはクライアントに意味のある情報を持たなければならないのでしょうか?私は彼らがランダムになるかもしれないと思う。OAuthクライアント識別子とクライアントシークレットを生成する方法は?

私はこれを行う方法に関するベストプラクティスを探していましたが、それほど多くは見つかりませんでした。だから、どんな答えも高く評価されます。

PD:.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

いいえ。しかし、クライアントシークレットは一意である必要はありません。クライアントIDのみが必要です。また、上記のコードサンプル(例えば、32+)で十分に長い 'length 'が与えられていると、統計的には2つの同一コードが生成される可能性はほとんどありません。 –

+0

秘密のために何をお勧めしますか? – davidbitton

2

仕様の作成方法についてはっきりしていませんが、ランダムな文字列で一意である必要があります。クライアント識別子についてsection #2.2

、: - クライアントが提供する登録 情報を表す一意の文字列

認証サーバが登録されているクライアントのクライアント 識別子を発行します。

+0

ユニークはい、彼らは「ランダム」であるかどうかスペックは気にしない:ここでは、1を生成する方法です。 –

関連する問題