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

32

我想使用.NET生成客户端ID和客户端密钥。我阅读了OAuth 2规范,例如客户端密钥的大小未在其中指定。是否有使用.NET框架生成客户端ID和客户端密钥的好方法?


第一个问题是,为什么要自己生成这些。如果您只想在应用程序中包含OAuth,则在向每个OAuth提供程序注册应用程序时,会向您提供ID和密钥。 - Bender
12
我有自己的OAuth提供程序,需要向客户端应用程序提供客户端ID和密钥。 - Sargis Koshkaryan
3个回答

37

根据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+其他内容进行哈希以实现自己的功能。

如果您想了解更多操作,请参考此处的一些开放实现。


12

3

附录A.1和A.2定义了client_idclient_secret的格式,其ABNF语法为*VSCHAR,其中VSCHAR的定义为

VSCHAR     = %x20-7E

意思是一组可打印的ASCII字符。规范未指定client_id的长度,如noted所述,由@Owen Tsao。这意味着虽然您可以选择一个随机的字节序列并将它们编码为base64,但在base64中出现的字符集仅代表此应用程序中可用于使用的严格子集。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接