Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OAuth令牌:我可以链接到什么用户表?_Oauth - Fatal编程技术网

OAuth令牌:我可以链接到什么用户表?

OAuth令牌:我可以链接到什么用户表?,oauth,Oauth,我正在开发一个YouTube应用程序,该应用程序需要有一个用户表,其中包含数据库中与其关联的常用数据。我决定为这个应用程序使用OAuth路由,有两个表,一个是AccessToken,另一个是RequestToken 我不确定要链接到某种用户表的是什么,是访问令牌还是请求令牌 如果令牌过期,我会查找哪个用户拥有该令牌,然后更新它吗 要注销该用户,我是否只需删除该用户的令牌并从会话中清除该令牌 编辑:换句话说,我基本上希望用户不必注册到我的站点,只需通过OAuth登录,并让我的应用程序在用户表中创建

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

我不确定要链接到某种用户表的是什么,是访问令牌还是请求令牌

  • 如果令牌过期,我会查找哪个用户拥有该令牌,然后更新它吗
  • 要注销该用户,我是否只需删除该用户的令牌并从会话中清除该令牌

  • 编辑:换句话说,我基本上希望用户不必注册到我的站点,只需通过OAuth登录,并让我的应用程序在用户表中创建一个用户条目,以便我的所有其他数据都可以链接到该条目。

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

    如果您只想使用YouTube登录,则根本不需要存储访问令牌。当用户带着访问令牌从YouTube返回时,您需要进行一次调用以获取其YouTube id(不确定YouTube是否支持令牌响应中带有id的扩展参数),并放弃访问令牌。如果您还想进行其他调用以访问用户的YouTube数据,则需要保留访问令牌

    实现这一点的常用方法是:

  • 当用户访问您的站点时,您使用一些我们称之为state的随机字符串设置会话cookie
  • 用户单击“使用YouTube登录”
  • 您可以从YouTube获取一个请求令牌,然后将其存储在本地缓存中(可以是数据库、redis、内存(如果这是小型应用程序)、memcache等),或者对其进行加密并将其存储在客户端的另一个cookie中。进行请求令牌调用时,在回调中包含一个“state”参数,其值在#1中设置为cookie。这是针对CSRF的关键安全防御措施。此外,重定向端点应该使用SSL
  • 使用请求令牌(以及可选的加密请求令牌秘密cookie)将用户重定向到YouTube
  • 用户登录YouTube,批准应用程序,然后被重定向回YouTube
  • 通过比较传入状态参数的值与来自该用户的会话cookie的值,可以检查返回重定向端点的用户是否与最初发送的用户匹配
  • 从本地缓存获取请求令牌密钥,或者通过解密先前使用的令牌密钥cookie(您决定使用的任何方法)来请求访问令牌
  • 使用访问令牌,进行YouTube API调用以获取用户信息
  • 在数据库中查找,查看是否已有具有该YouTube id的用户。如果有,这只是一个登录,如果没有,这是一个新的用户注册,因此在用户表中为他们创建一个新记录

  • 好消息。。当你说在回调中包含state参数是为了用户不能让窗口长时间处于打开状态吗?而且我一直在四处寻找,youtube似乎没有提供获取用户id的方法……state参数仅用于防止CSRF攻击。基本上,这是为了确保攻击者不能使用自己的请求令牌创建链接,并诱使其他用户跟随它返回到您的站点,从而接管他们的数据。至于YouTube API,我没有这方面的经验,但我认为你可以使用普通的谷歌API。