web-dev-qa-db-ja.com

OAuth 2クライアントIDとシークレットを生成する方法

.NETを使用してクライアントIDとクライアントシークレットを生成したい。 OAuth 2仕様を読みました。たとえば、クライアントシークレットのサイズはそこに指定されていません。

21

セクション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をハッシュし、自分で実装することもできます。

より多くのプラクティスを知りたい場合は、 ここからいくつかのオープンな実装を参照してください。

26
Owen Cao

PowerShellでClientSecretキーを生成するコードは次のとおりです

$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

4
Philippe

付録A.1およびA.2 は、両方のclient_idおよびclient_secret ABNF文法で*VSCHARここで、VSCHARは次のように定義されます

VSCHAR     = %x20-7E

一連の印刷可能ASCII文字。client_idは、 @ Owen Tsao による noted のように、仕様では指定されていません。これは、canでバイトのランダムシーケンスを選択し、base64でエンコードしますが、base64に表示される文字セットは、このアプリケーションで使用できるもの。

3
cjlarose