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

时间:2014-05-14 10:33:50

标签: c# .net vb.net web-services oauth

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

3 个答案:

答案 0 :(得分:26)

作为OAuth 2.0授权框架的section 2.2说:

  

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

     

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

因此,您可以自己定义客户端标识符。这取决于你的选择。您可以使用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以自行实现它。

如果您想了解更多做法,可以参考some open implementations from here.

答案 1 :(得分:3)

appendices A.1 and A.2client_idclient_secret的格式定义为*VSCHAR VSCHAR,其中VSCHAR = %x20-7E 定义为

client_id

表示可打印的ASCII字符集。规范未指定{{1}}的长度,noted@Owen Tsao。这意味着虽然可以选择随机字节序列并在base64中对它们进行编码,但base64中出现的字符集仅表示可在此应用程序中使用的字符集的严格子集。

答案 2 :(得分:3)

以下是在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

找到了它