1

好吧,我真的知道它是什么。我很久以前就使用 Facebook/Twitter API。它有效,没有错误,抱歉:)。然而,下面的事情困扰着我。

什么是 OAuth 提供者端的令牌?我只从客户端看到令牌。但是有一件有趣的事情。这很容易理解。

默认情况下,我收到的令牌是有时间限制的。但是,当我请求具有离线访问权限的 API 时,我收到的令牌将永远有效,没有时间限制。令牌是否应该以这种方式存储在 OAuth 提供者数据库中?如果是这样,是什么阻止了用户生成数以百万计的代币?如果有很多令牌并且所有令牌都存储在没有时间限制的数据库中怎么办?数据库然后变成垃圾堆。这是真的方法吗?

我对令牌的存储方式有两个假设:

  1. 令牌是分配给它的一组访问权限的简单ID ,每个令牌都存储在 OAuth 提供者端。

  2. 代币是一个独立的概念。访问权限被加密并打包到令牌中,然后在提供者端被解密。令牌生命周期也包含在其中

第二个问题。如果我想开发自己的 OAuth 提供程序,存储令牌的最佳方式是什么?

4

1 回答 1

2

OAuth 令牌只是一个 ID,不包含任何信息。事实上,如果令牌包含真实信息,那就不好了,因为这样会更容易被黑客入侵。提供者将该令牌与您的应用程序帐户相关联,并将他们需要的任何信息存储在他们自己的数据库中。我不了解 Facebook,但 Twitter OAuth 令牌不会过期,除非所有者重新生成它们。

当您进行 OAuth 时,您将知道正在使用您的程序的用户是谁,并拥有自己的数据库表来保存用户数据。在用户的第一次 OAuth 身份验证中,获取他们的凭据并将其保存在您的数据库中。然后,在您对服务(即 Twitter)进行的每个后续查询中,重新加载这些凭据,以便用户不必重新进行身份验证。如果使用当前凭据的查询失败,您可能需要重新验证并保存新凭据 - 以防旧凭据因某种原因过期。这样,您系统中的每个用户都只有 OAuth 令牌,并且您可以管理该用户的生命周期。

于 2012-06-15T20:03:41.983 回答