我想使用.NET生成客户端ID和客户端密钥。我阅读了OAuth 2规范,例如客户端密钥的大小未在其中指定。是否有使用.NET框架生成客户端ID和客户端密钥的好方法?
我想使用.NET生成客户端ID和客户端密钥。我阅读了OAuth 2规范,例如客户端密钥的大小未在其中指定。是否有使用.NET框架生成客户端ID和客户端密钥的好方法?
根据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;
同时,您可以使用加密哈希函数()来对UUID+SystemTime+其他内容进行哈希以实现自己的功能。
如果您想了解更多操作,请参考此处的一些开放实现。
这是在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
client_id
的长度,如noted所述,由@Owen Tsao。这意味着虽然您可以选择一个随机的字节序列并将它们编码为base64,但在base64中出现的字符集仅代表此应用程序中可用于使用的严格子集。