我询问了有关我的问题的各种问题(here和here),我也在#oauth& #open freenode在IRC上的频道。 (这是一个“UP”问题,这是另一个问题)
我将总结我的项目配置:任何人都可以创建一个可以使用我的API的应用程序。首先,我将使用我的API和基于Web的应用程序,但有关API的文档将是公开的。这有点像Twitter API。
我面临的问题是我如何确定哪个用户正在使用API(检索他的个人数据,如推文),即使用户正在使用我不知道是谁创建的应用程序(再次,就像推特和周围的所有应用程序一样。)
我搜索了很多内容,在前面给出的答案的帮助下,我看了看OAuth。
据我所知,OAuth的工作方式如下:
到目前为止,一切顺利。但我无法弄明白的是,当用户退出应用程序并再次运行时:应用程序如何记住用户之前是否使用过它?
(在你们有些人给我带来 cookie 答案之前,我会说这是一个简单的例子,如果用户清除他的cookie,格式化他的电脑或者改变它的电脑。)
我能找到的唯一解决方案是,当未经身份验证的用户(例如没有记忆cookie)进入应用程序时,应用程序会再次将他重定向到API以验证自己,但这次,用户将不会重新允许应用程序(授权),因为它已经做到了。然后,API会将用户返回到应用程序以允许他玩这个。
这是正确的吗? 安全这样做的方法吗?
#OAuth IRC频道告诉我有关新协议WebID的信息,但目前处于预选模式,我不想使用将来会不断变化的内容:/
非常感谢你的帮助!
答案 0 :(得分:1)
简短回答:OAuth会生成经过身份验证的访问令牌。该访问令牌与一个用户绑定。只要访问令牌有效。第三个应用程序可以执行API允许访问令牌执行的任何操作。
答案很长: OAuth的一点是它不会“登录”用户。 OAuth为第三方应用程序提供了所谓的访问令牌,无论用户是否已登录,都可以代表用户访问数据。
许多服务限制其访问权限。例如,Twitter发布两种类型的访问令牌,只读和读/写。但是没有登录使用API的概念。虽然访问令牌有效,但第三方应用程序可以访问用户的数据,并在没有用户明确交互的情况下进行更改。
大多数API提供商都具有撤销访问令牌的功能。当你在twitter中查看你的Connections page时会发生这种情况。查看撤销访问链接?
我个人喜欢OAuth方法。作为API提供程序,您可以控制允许访问令牌执行的操作,并且用户可以使用他/她的资源来杀死不良应用程序。就身份验证而言,OAuth是安全的。第三方应用程序不会获取用户的密码。但经过身份验证后,他们可以执行API允许的任何操作。
答案 1 :(得分:1)
如果我们看看Twitter如何运作,我认为缺少的一点是项目的另一层:官方网站:
问题是,当您想允许任何第三方应用程序使用Twitter时,此应用程序会将您重定向到Twitter API的OAuth页面,如果您已连接,但如果您不是,则会将您重定向到登录页面,位于http://api.twitter.com/login (我不知道是否在api.twitter.com中保留api用于登录用户,而不仅仅是twitter.com是正确的,但这只是语义)
因此,工作流程将是:
此实现有两个问题:
这是一个可能的解释,但我需要更多详细信息,了解这是如何可行的以及您对该解决方案的想法。它会起作用吗?
(我补充说这是一个答案,因为它是一个(不完整,不太确定,我同意)一个。