OAuth令牌:我可以将哪些内容链接到用户表?

时间:2011-08-02 16:28:31

标签: oauth

我正在开发一个YouTube应用程序,该应用程序需要一个User表,其中包含与数据库中相关的常用数据。我决定为这个应用程序使用OAuth路由,并有2个表,一个是AccessToken,另一个是RequestToken。

我不确定要链接到某种类型的User表,它是访问令牌还是请求令牌?

  1. 如果令牌过期,我只会查找哪个用户拥有该令牌然后更新它?
  2. 要签出用户,我是否只删除用户的令牌并从会话中清除令牌?
  3. 编辑:换句话说,我基本上希望用户不必注册到我的网站,而只是通过OAuth登录并让我的应用程序在User表中创建用户条目,这样我的所有其他数据都可以链接起来那个。

1 个答案:

答案 0 :(得分:1)

这有两个部分:登录和资源。

如果您只想使用YouTube进行登录,则根本不需要存储访问令牌。当用户使用访问令牌从YouTube返回时,您拨打一个电话即可获取其YouTube ID(不确定YouTube是否支持带有令牌响应中ID的扩展参数)并丢弃访问令牌。如果您还想拨打其他电话来访问用户的YouTube数据,则需要保留访问令牌。

实现这一目标的常用方法是:

  1. 当用户访问您的网站时,您可以使用我们称之为状态的随机字符串设置会话Cookie。
  2. 用户点击“使用YouTube登录”
  3. 您可以从YouTube获取请求令牌,然后将其存储在某个本地缓存中(可以是数据库,redis,内存,如果这是一个小规模应用,内存缓存等)或加密它并将其存储在客户端上的另一个cookie。当您进行请求令牌调用时,在回调中包含一个'state'参数,其值设置为#1中的cookie。这是对CSRF的重要安全防御。此外,您的重定向端点应使用SSL。
  4. 您使用请求令牌(以及可选的加密请求令牌机密cookie)将用户重定向到YouTube
  5. 用户登录YouTube,批准该应用程序,然后重定向回来
  6. 通过比较传入状态参数的值与用户会话cookie的值,检查返回重定向端点的用户是否与最初发送的用户匹配。
  7. 从本地缓存中获取请求令牌机密,或者通过解密先前使用的令牌机密cookie(您决定使用哪种方法)并请求访问令牌
  8. 使用访问令牌进行YouTube API调用以获取用户信息
  9. 在您的数据库中查找,看看您是否已拥有拥有该YouTube ID的用户。如果你这样做,这只是一个登录,如果没有,这是一个新的用户注册,所以在你的用户表中为它们创建一个新的记录。