2010-01-25 105 views
2

我有一个谷歌应用程序引擎项目,我想让我的REST API可供第三方使用。像Twitter API一样。Google App Engine(python)授权网络服务/第三方客户

Twitter要求发送用户名和密码,以便他们可以被授权 - 我可以使用Google用户帐户吗?

我已经在这个网站,这不是因为他们的凭据被输入到第三方应用一个首选方法某处读取/传递等

我不想过度复杂化,并将其重定向到谷歌自己的登录/验证码等等。我已经看到这个实现 - 也与桌面/手机/小部件这可能不工作。

是第三方应用程序调用我的服务的解决方案 - 应用程序在我的网站上调用一个页面(要求登录 - 我只是添加登录权限),然后用户登录,然后我的应用程序创建一个长令牌然后传回第三方应用程序,然后将其存储在自己的存储库中,并将其作为post/put/delete请求中的Token arg传递。 然后,我的REST服务会检查令牌和查找(令牌|用户密钥)对,并允许/拒绝方法调用。

我也可以问应用程序的域名?并存储这一点。我想我可以读取REST服务请求的URL并检查它们是否匹配等?

这是一个合理的解决方案,还是我住在90年代?

回答

1

OAuth是在考虑到这种情况下创建的。这是您刚刚描述的那种授权令牌方案的规范,现在它是reasonably widespread

有关余额,请参阅this recent StackOverflow thread

+0

嗯是的,我已经考虑过你所引用的线索中的反馈并不积极 - 每次客户端连接时都必须访问oAuth - 这对于第三方应用来说有点尴尬。 如果我正确地请求REST中非常直接的用户名和密码,Twitter会使用一个简单的系统。再加上任何第三方应用程序只需要在请求get/post中包装这个 - 再次简单的东西。 我在这里的假设是正确的? – spidee 2010-01-25 17:38:58

+1

Twitter也使用OAuth。 不确定您的意思是“每次客户端连接时都必须访问”;所做的每个API请求都需要有一个OAuth签名,但用于签名的令牌可能相当长久并且存在于各个会话中。 OAuth通过“发送密码”方案提供的是针对被盗取令牌和请求篡改的一些安全措施。如果你不担心这一点,那么OAuth就不那么有趣了。 – keturn 2010-01-25 23:25:45

+0

我想也许我应该重新考虑使用在Google帐户模块中构建的应用引擎。我也将重新审视oAuth作为保护我的API端点的目的。 – spidee 2010-01-26 15:48:13