OAuth 2.0令牌和生命周期

20

我正在尝试理解OAuth 2.0(服务器端流程)。让我们以Google联系人API的简单示例为例。

根据规范,我已经在Google上注册了我的应用程序,并获得了客户端ID和客户端密钥。我还提供了回调URL。

获取访问令牌需要我执行以下步骤:

  1. 按照Google站点上OAuth文档中指定的要求,重定向用户到特定的URL,其中包含所需的查询字符串和标头(https://accounts.google.com/o/oauth2/auth bla bla stuff)。

  2. 用户输入凭据后,将返回到我已在Google注册的应用程序中指定的回调URL。此处还会将查询字符串参数&code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp6 bla bla添加到回调URL中。因此,我现在拥有授权代码。

  3. 现在,我向https://accounts.google.com/o/oauth2/token发送一个请求,其中包含我在上一步中获得的授权代码。这样,我就可以获得访问令牌和刷新令牌。

一旦我获得了这个“访问令牌”,我就可以访问(比如联系人API并获取用户联系人)。

到这里为止,一切都很好。我还了解到访问令牌的有效期有限,我们可以使用“刷新令牌”来获取新的访问令牌。

A.作为开发人员,我是否负责存储和检查“访问令牌”是否有效?

B.如果我的网站是一个公共网站,支持“使用Google/Facebook/Twitter账户登录”,我该如何知道两天后返回网站的是同一用户,并且我不需要要求他重新登录,而是应该自动登录到网站?因为我不想让他重复授权给我的应用程序。

比如说:我通过我的FB登录TechCrunch网站并可以对文章进行评论。现在,即使过了一周,如果我再访问TechCrunch,我也不需要再次登录。他们是怎样知道这是我,而且我已经过身份验证的呢?

1个回答

16
  1. 使用OAuth 2.0时,您将获得一个访问令牌,并附带一个过期时间。您可以跟踪其过期时间,或者可以继续使用该访问令牌,直到出现INVALID_TOKEN错误。然后,您需要调用刷新令牌服务以获取新的访问令牌。您的刷新令牌有效期至吊销。

  2. 这是OpenID,而不是OAuth。流程相似,但是用于登录用户到您的服务中。OAuth用于您从另一个帐户检索用户数据。


针对B,我需要在网站上实现OpenID功能,以便用户可以使用FB / Twitter / Google等帐户登录,然后单独进行OAuth,以便我可以提取他们的数据。如果我的理解有误,请纠正我。 - NoobDeveloper
是的和不是的。有一种混合协议,可以同时实现两者。 - Mark S.
混合协议的链接指向 OAuth 1.0。我不会使用OAuth 1.0。 - NoobDeveloper
“刷新令牌”有效期有多长? - NoobDeveloper
这要取决于服务器。到期时间包含在持有刷新令牌的响应中。 - Mark S.
6
响应中附带的过期时间适用于访问令牌(短期有效),而不是刷新令牌(长期有效)。 - NoobDeveloper

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