OAuth访问令牌和刷新令牌创建

我为应用程序实现了我自己的OAuth身份验证系统(具有refresh_token支持),并且我有一些关于如何执行此操作的问题:

  • 客户端标识:客户端在auth服务器中注册并获取client_idclient_secret 。 我如何生成它? 两种价值观之间有某种关系吗?
  • 用户身份验证:客户端发送users_credentials (例如用户名+密码)+ client_id并获取refresh_token(temp?)access_token 。 那access_token是我应该用在进一步的请求,或者我应该使用accesss_token` = F(refresh_token,access_token,client_secret)。 在第二种情况下,F函数是什么组成的?
  • 访问令牌刷新:客户端发送client_idrefresh_token并获取access_token (以及可选的新的refresh_token)。 access_token是否需要相同的转换(不管它是什么),就像点2一样?
  • 如果我错了,什么时候以及如何使用client_secret? 完整的答案和具体的例子将被“奖励”。


  • 授权/验证服务器在您创建帐户时会生成这些值(例如,当您使用Facebook或Google创建开发者帐户时)。 如果你自己在做这些部件,它们应该是密码安全的伪随机数字或字母。 请记住,客户端ID通常是公开可见的,因此请选择一组相当大的字母数字(我使用30个字符)。 这个秘密是私人的,可能很难猜出,所以我选择了30位数字和字母,数字和符号。 这些不相互关联,只是一个是公开的,另一个不是。
  • 通常的方法是,浏览器重定向到auth服务器,在URL中传递客户端ID(和重定向URI),而不是用户ID和密码。 OAuth2的重点在于客户端系统永远不会看到用户名和密码,而只能看到auth服务器。 在重定向之后,auth服务器验证客户端ID,检查用户名/密码(例如),然后用临时代码返回到重定向URI。 该临时代码被传回Auth服务器以获取访问令牌。 由于此调用是作为服务器的POST进行的,因此它还会传递客户端密钥以验证它是否是正确的客户端系统,而不是从别处盗取客户端ID的人。 此时,auth服务器将返回一个访问令牌(以及可选的刷新令牌 - 您不需要使用它们,我不会)。
  • 如果客户端系统想要登录用户而不必一直输入他们的用户名和密码,则可以使用刷新令牌(如果可用)回拨到Auth服务器上,并且如果Auth服务器很高兴刷新令牌仍然有效并且任何其他业务规则都是正确的,它可以直接返回另一个访问令牌而不涉及用户。
  • 我建议在这里阅读OAuth2规范:OAuth2规范RFC6749。 这可能需要一段时间,但如果您删除不需要的位并减少数据量,则有很多有用的示例。


    首先客户端标识符可以是任何您想要的字符串,但它应该对每个客户端都是唯一的。 如果您愿意,甚至可以成为客户的选择。 客户端秘密应该是一个密码强的随机字符串。 这里是你如何在C#中生成一个:

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

    第二 ,OAuth的重点在于允许外部应用程序代表您执行操作,而不要求您提供凭据。 所以,你需要实现一个认证服务器来为你做部分日志记录。 用户打开应用程序并获得使用您的网站登录的选项。 一旦用户键入他的凭证,您就可以访问令牌并刷新令牌。 然后,应用程序可以简单地使用令牌来代表用户执行操作。 我写了一个关于高效的OAuth2.0服务器/提供者如何工作的答案? 这解释了如何构建访问令牌。
    请记住,刷新令牌和访问令牌的生命周期纯粹取决于您打算如何使用它们以及您的安全框架是什么样子。

    最后 ,刷新标记也可以是HMAC编码的字符串/ JSON对象,正如我在链接问题的答案中所解释的。 您可以拥有随机刷新令牌和大型后端存储,以保证它能够验证传入请求中的令牌,或者具有HMAC编码的字符串以提高安全性/减少对解密/加密令牌的存储要求/延迟。

    另外,请确保你经历了所有的流程,也可能是RFC,如Lukos所述。

    链接地址: http://www.djcxy.com/p/8411.html

    上一篇: OAuth access token and refresh token creation

    下一篇: Javascript access to Location header's URL fragment for OAuth 2