Oauth Restful API,应用程序如何(重新)匹配用户和现有用户?
我问了很多关于我的问题(和),我也在IRC上的#oauthOpenIDFreeNode频道问了很多问题。(这是一个“向上”的问题,是另一个问题) 我将总结我的项目配置:任何人都有可能创建一个可以使用我的API的应用程序。首先,我将开发我的API和基于Web的应用程序,但有关API的文档将是公开的。这有点像Twitter API 我面临的问题是,即使用户使用的应用程序我不知道是谁制作的(同样,像twitter和周围的所有应用程序),我如何确定哪个用户正在使用API(检索他的个人数据,比如你的推文) 我在谷歌上搜索了很多,在前面给出的答案的帮助下,我查看了OAuth 据我所知,OAuth的工作方式如下:Oauth Restful API,应用程序如何(重新)匹配用户和现有用户?,oauth,openid,restful-authentication,remember-me,Oauth,Openid,Restful Authentication,Remember Me,我问了很多关于我的问题(和),我也在IRC上的#oauthOpenIDFreeNode频道问了很多问题。(这是一个“向上”的问题,是另一个问题) 我将总结我的项目配置:任何人都有可能创建一个可以使用我的API的应用程序。首先,我将开发我的API和基于Web的应用程序,但有关API的文档将是公开的。这有点像Twitter API 我面临的问题是,即使用户使用的应用程序我不知道是谁制作的(同样,像twitter和周围的所有应用程序),我如何确定哪个用户正在使用API(检索他的个人数据,比如你的推
- 用户访问使用my API的应用程序(web、移动等)
- 应用程序将用户重定向到API以进行身份验证(我将使用OpenId)和授权(OAuth)。这有点奇怪,因为API将有一个用于登录和授权的web界面(我想这是自Twitter以来的工作方式)
- API使用一些令牌将连接的用户重定向到应用程序。在这些令牌中,有一个令牌表示应用程序必须存储的用户,以便向API指示当前使用该令牌的用户(我是否正确?)
非常感谢你的帮助 简短回答: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):没有