我正在为应用程序实现自己的OAuth身份验证系统(具有refresh_token支持),我对如何执行操作有一些疑问:
如果我错了,何时以及如何使用client_secret? 完整的答案和具体的例子将得到“赏识”。
答案 0 :(得分:3)
我建议您在此处阅读OAuth2规范:OAuth2 Spec RFC6749。这可能需要一段时间,但如果删除不需要的位并减少数据量,则会有很多有用的示例。
答案 1 :(得分:0)
第一次, client identifier 可以是您想要的任何字符串,但每个客户端都应该是唯一的。如果您愿意,它甚至可以是客户的选择。 客户端密钥应该是加密强大的随机字符串。以下是如何在C#中生成一个:
RandomNumberGenerator cryptoRandomDataGenerator = new RNGCryptoServiceProvider();
byte[] buffer = new byte[length];
cryptoRandomDataGenerator.GetBytes(buffer);
string uniq = Convert.ToBase64String(buffer);
return uniq;
第二次,OAuth的重点是允许外部应用代表您做事而不要求您提供凭据。因此,您需要实现一个身份验证服务器,以便为您完成日志记录。用户打开应用程序并获得使用您的网站 登录的选项。一旦用户键入其凭据,您就会倾向于访问令牌并刷新令牌。然后,应用程序可以简单地使用令牌代表用户执行操作。我写了How would an efficient OAuth2.0 server / provider work?的答案,解释了如何构建访问令牌。
请记住,刷新令牌和访问令牌的生命周期的需求完全取决于您打算如何使用它们以及您的安全框架是什么样的。
最后,刷新令牌也可以是HMAC编码的字符串/ JSON对象,正如我在链接问题的答案中所解释的那样。您可以使用随机刷新令牌和大型后端存储来保证传入请求中的令牌,或者使用HMAC编码的字符串来增加安全性/减少存储要求/延迟来解密/加密令牌。
此外,请确保您按照Lukos的说法检查所有流程和可能的RFC。