.NETを使用してクライアントIDとクライアントシークレットを生成したい。 OAuth 2仕様を読みました。たとえば、クライアントシークレットのサイズはそこに指定されていません。
セクション2.2 のOAuth 2.0 Authorization Frameworkによると:
認可サーバーは、登録されたクライアントにクライアント識別子を発行します-クライアントによって提供された登録情報を表す一意の文字列。クライアント識別子は秘密ではありません。リソース所有者に公開され、クライアント認証に単独で使用してはなりません。クライアント識別子は、認可サーバーに固有です。
クライアント識別子の文字列サイズは、この仕様では未定義のままです。クライアントは、識別子のサイズに関する仮定を避ける必要があります。認可サーバーは、発行する識別子のサイズを文書化する必要があります。
したがって、クライアント識別子を自分で定義できます。それはあなたの選択次第です。 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をハッシュし、自分で実装することもできます。
より多くのプラクティスを知りたい場合は、 ここからいくつかのオープンな実装を参照してください。
PowerShellでClientSecretキーを生成するコードは次のとおりです
$bytes = New-Object Byte[] 32
$Rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$Rand.GetBytes($bytes)
$Rand.Dispose()
$newClientSecret = [System.Convert]::ToBase64String($bytes)
$newClientSecret
付録A.1およびA.2 は、両方のclient_id
およびclient_secret
ABNF文法で*VSCHAR
ここで、VSCHAR
は次のように定義されます
VSCHAR = %x20-7E
一連の印刷可能ASCII文字。client_id
は、 @ Owen Tsao による noted のように、仕様では指定されていません。これは、canでバイトのランダムシーケンスを選択し、base64でエンコードしますが、base64に表示される文字セットは、このアプリケーションで使用できるもの。