web-dev-qa-db-fra.com

Comment générer OAuth 2 ID client et secret

Je souhaite générer un identifiant client et un secret client à l'aide de .NET. J'ai lu la spécification OAuth 2 et par exemple la taille du secret client n'y est pas spécifiée. Existe-t-il une bonne pratique pour générer l'identifiant client et le secret client à l'aide du framework .NET ???

21

Comme section 2.2 du OAuth 2.0 Framework d'autorisation dit:

Le serveur d'autorisation délivre au client enregistré un identifiant client - une chaîne unique représentant les informations d'enregistrement fournies par le client . L'identifiant client n'est pas un secret; il est exposé au propriétaire de la ressource et NE DOIT PAS être utilisé seul pour l'authentification du client. L'identifiant client est unique au serveur d'autorisation.

La taille de la chaîne d'identifiant client n'est pas définie par cette spécification. Le client doit éviter de faire des hypothèses sur la taille de l'identifiant. Le serveur d'autorisation DEVRAIT documenter la taille de tout identifiant qu'il émet.

Vous pouvez donc définir vous-même l'identifiant client. Cela dépend de votre choix. Vous pouvez utiliser System.Guid pour en générer un simplement, ou utiliser uid + systemTime, vous pouvez également le hacher, le chiffrer ou tout ce que vous voulez d'autre.

Mais le secret client doit être une chaîne aléatoire cryptographiquement forte. Vous pouvez en générer un comme ceci:

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

Vous pouvez également utiliser des fonctions de hachage cryptographiques () pour hacher UUID + SystemTime + somthingelse pour l'implémenter vous-même.

Si vous voulez en savoir plus sur les pratiques, vous pouvez vous référer à quelques implémentations ouvertes d'ici.

26
Owen Cao

Voici le code pour générer une clé ClientSecret dans PowerShell

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

Je l'ai trouvé ici https://docs.Microsoft.com/en-us/sharepoint/dev/sp-add-ins/replace-an-expiring-client-secret-in-a-sharepoint-add- dans # générer un nouveau secret

4
Philippe

Les annexes A.1 et A.2 définissent le format des client_id et client_secret dans leur grammaire ABNF comme *VSCHARVSCHAR est défini comme

VSCHAR     = %x20-7E

ce qui signifie l'ensemble des caractères imprimables ASCII. La longueur du client_id n'est pas spécifié par la spécification, comme noté par @ Owen Tsao . Cela signifie que bien que vous puissiez sélectionner une séquence aléatoire d'octets et les coder en base64, l'ensemble des caractères qui apparaissent dans base64 ne représentent qu'un sous-ensemble strict de ceux disponibles pour une utilisation dans cette application.

3
cjlarose