Oauth Restful API,应用程序如何(重新)匹配用户和现有用户?

Oauth Restful API,应用程序如何(重新)匹配用户和现有用户?,oauth,openid,restful-authentication,remember-me,Oauth,Openid,Restful Authentication,Remember Me,我问了很多关于我的问题(和),我也在IRC上的#oauth&#OpenIDFreeNode频道问了很多问题。(这是一个“向上”的问题,是另一个问题) 我将总结我的项目配置:任何人都有可能创建一个可以使用我的API的应用程序。首先,我将开发我的API和基于Web的应用程序,但有关API的文档将是公开的。这有点像Twitter API 我面临的问题是,即使用户使用的应用程序我不知道是谁制作的(同样,像twitter和周围的所有应用程序),我如何确定哪个用户正在使用API(检索他的个人数据,比如你的推

我问了很多关于我的问题(和),我也在IRC上的#oauth&#OpenIDFreeNode频道问了很多问题。(这是一个“向上”的问题,是另一个问题)

我将总结我的项目配置:任何人都有可能创建一个可以使用我的API的应用程序。首先,我将开发我的API和基于Web的应用程序,但有关API的文档将是公开的。这有点像Twitter API

我面临的问题是,即使用户使用的应用程序我不知道是谁制作的(同样,像twitter和周围的所有应用程序),我如何确定哪个用户正在使用API(检索他的个人数据,比如你的推文)

我在谷歌上搜索了很多,在前面给出的答案的帮助下,我查看了OAuth

据我所知,OAuth的工作方式如下:

  • 用户访问使用my API的应用程序(web、移动等)
  • 应用程序将用户重定向到API以进行身份验证(我将使用OpenId)和授权(OAuth)。这有点奇怪,因为API将有一个用于登录和授权的web界面(我想这是自Twitter以来的工作方式)
  • API使用一些令牌将连接的用户重定向到应用程序。在这些令牌中,有一个令牌表示应用程序必须存储的用户,以便向API指示当前使用该令牌的用户(我是否正确?)
到目前为止,一切进展顺利。但我不明白的是,当用户退出应用程序并再次使用时:应用程序如何能记住用户是以前使用过它的用户

(在你们中的一些人给我提供cookie答案之前,我要说这是一个简单的例子,如果用户清除cookie、格式化计算机或更改计算机,情况也一样。)

我能找到的唯一解决方案是,当未经身份验证的用户(例如,没有记忆cookie)进入应用程序时,应用程序会再次将他重定向到API以进行身份验证,但这一次,用户不必重新允许应用程序(授权),因为它已经这样做了。然后API会将用户返回到应用程序,允许他玩这个

这是正确的&安全的方法吗

#OAuth IRC频道告诉我关于新协议WebID的情况,但这目前处于预起草模式,我不想使用将来会不断变化的内容:/


非常感谢你的帮助

简短回答:OAuth生成经过身份验证的访问令牌。该访问令牌绑定到一个用户。只要访问令牌有效。第三个应用程序可以执行API允许访问令牌执行的任何操作

长答案: OAuth的问题是它不会“登录”用户。OAuth为第三方应用程序提供了所谓的访问令牌,可用于代表用户访问数据,无论用户是否登录

许多服务限制其访问令牌。例如,Twitter发布两种类型的访问令牌,只读和读/写。但是没有登录使用API的概念。虽然访问令牌有效,但第三方应用程序可以访问用户的数据,并在没有用户显式交互的情况下更改内容

大多数API提供程序都具有撤销访问令牌的功能。这就是当你在推特上看你的博客时发生的事情。查看撤销访问链接?


我个人喜欢OAuth方法。作为API提供者,您可以控制允许访问令牌执行的操作,并且用户可以阻止坏应用程序使用其资源。就身份验证而言,OAuth是安全的。第三方应用程序无法获取用户的密码。但一旦通过身份验证,它们就可以做API允许的任何事情

如果我们看看Twitter是如何工作的,我认为缺少的一点是该项目的另一层:官方网站:

问题是,当您希望允许任何第三方应用程序使用Twitter时,如果您已连接,此应用程序会将您重定向到Twitter API的OAuth页面,但如果您未连接,则会将您重定向到登录页面,该页面位于 (我不知道将api保存在api.twitter.com(而不仅仅是twitter.com)中用于登录用户是否正确,但这只是语义)

因此,工作流程将是:

  • 用户访问第三方应用程序(如网站)
  • 此第三方将用户重定向到API进行授权
  • API首先将用户重定向到网站进行身份验证
  • 官方网站将用户重定向到OpenId提供商(或Facebook connect)
  • 进行身份验证(通过多个请求)
  • 在用户成功通过身份验证后,网站将其重定向到API
  • 用户允许/不允许第三方应用程序请求的权限
  • API将返回到第三方应用程序
  • 用户现在可以使用(或不使用)该应用程序
此实现有两个问题:

  • 每次用户未通过身份验证(清除cookies、从其他计算机连接自己等),他都必须通过身份验证方法,重定向到官方网站,然后重定向到第三方应用程序(API将是透明的,因为它已经允许应用程序访问他的数据)
  • 由于重定向过多,所有这些层肯定会在身份验证过程中丢失用户
  • 一个可能的解决方案是存储用户的访问令牌,例如在移动应用程序中,但对于纯html/css/js导向的应用程序,这是不可能的。在第三方web应用程序中,将用户与API的访问令牌相匹配的登录/密码将是另一个解决方案,如Seesmic(我认为),但这只是无用的(对我们来说,不是Seesmic):没有