如何生成OAuth 2客户端ID和密码

Sar*_*yan 21 .net c# vb.net web-services oauth

我想使用.NET生成客户端ID和客户端密钥.我阅读了OAuth 2规范,例如,那里没有指定客户端密钥的大小.使用.NET框架生成客户端ID和客户端密钥是否有良好的做法?

Owe*_*Cao 27

正如OAuth 2.0授权框架的第2.2节所述:

授权服务器向注册客户端发出客户端标识符 - 表示客户端提供的注册信息的唯一字符串.客户端标识符不是秘密; 它暴露给资源所有者,不得单独用于客户端身份验证.客户端标识符对于授权服务器是唯一的.

此规范未定义客户端标识符字符串大小.客户端应避免对标识符大小进行假设.授权服务器应该记录它发出的任何标识符的大小.

因此,您可以自己定义客户端标识符.这取决于你的选择.您可以使用System.Guid简单生成一个,或使用uid + systemTime,也可以对其进行哈希处理,加密或其他任何您想要的内容.

但客户端秘密应该是加密强大的随机字符串.你可以这样生成一个:

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

您还可以使用加密哈希函数()来哈希UUID + SystemTime + somthingelse来自己实现它.

如果您想了解更多实践,可以从这里参考一些开放实现.


Phi*_*ppe 6

这是在 PowerShell 中生成 ClientSecret 密钥的代码

$bytes = New-Object Byte[] 32
$rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rand.GetBytes($bytes)
$rand.Dispose()
$newClientSecret = [System.Convert]::ToBase64String($bytes)
$newClientSecret
Run Code Online (Sandbox Code Playgroud)

我在这里找到它https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/replace-an-expiring-client-secret-in-a-sharepoint-add-in#generate-一个新的秘密