我正在用JavaScript(客户端)和Python / Google App Engine(服务)编写Web应用程序,我希望用户在其中添加数据。我创建了一个欢迎页面,其中包含登录/注册框。输入正确的用户名/密码后,我希望用户获得授权,然后转发到Web应用程序页面,并让用户将AJAX请求发送到具有指定用户ID的RESTful服务,即(host / {userid} / some_resource) - 并在服务方面确保用户已获得授权。
我如何实现这一点并使一切安全(即从不以明文形式发送用户名/密码)?我发现了一些“流行语”,如“HTTP身份验证”和“会话”,但无法找到关于如何实现这类事情的可靠而明确的文章。
我也想知道不同的热门网站如何处理授权(即GMail通过HTTPS工作; Stackoverflow和Facebook似乎使用HTTP)。
答案 0 :(得分:3)
我不是重新发明轮子的粉丝,因此我建议您使用GAE内置的Google帐户(或OpenID)集成或使用Django用户身份验证。
GAE python上的Google帐户/ OpenID:http://code.google.com/appengine/docs/python/users/
Django身份验证:https://docs.djangoproject.com/en/dev/topics/auth/
通过这种方式,您拥有管理用户所需的一切,并且使用Django,您还可以获得权限框架。
答案 1 :(得分:1)
基本上你想要的是一个会话。当用户登录服务器时,会向他们返回一个唯一的令牌,用于指定系统中的会话或用户。每当用户发出后续请求时,他们都会传回令牌,以便服务器检查它并确保允许用户做他们想做的任何事情。
在Web应用程序中,您通常在服务器端创建会话,并将令牌作为cookie传回。用户浏览器将在每个请求时自动将此令牌发送到服务器,以便服务器可以看到用户已通过身份验证。这就是Gmail,Stack Overflow和Facebook(以及几乎每个网站)所做的事情。
如果您想在GAE上使用Cookie,您可以使用内置的Google用户系统,它会自动创建会话和Cookie,所有您需要做的就是使用用户API来确定登录的用户(请参阅GAE文档中的用户示例)。如果您不想使用Google用户系统(因为您不希望要求您的用户拥有Google帐户),您可以滚动自己的会话系统或使用已建立的库,例如GAE-Sessions(https:// github) .COM /抓住过/ GAE的会话)。该网站上有一些关于如何使用它的示例代码。
除此之外:Web浏览器未严格使用的RESTful API通常不使用cookie进行身份验证。它们或者为每个用户预先创建一个令牌(当用户创建时)或者当用户登录时(在对登录请求的响应中将令牌传回),并且用户将该令牌传递回他们的请求中的服务器。参数或HTTP标头。
在上述两种情况下,您都可以通过HTTPS进行登录,并通过HTTP进行其余操作,无需您的任何额外工作,但是从客户端传递到服务器的令牌将被发送不安全地通过HTTP这是不好的。很多会话系统会跟踪会话属于哪个IP地址,所以如果有人试图通过复制他们的令牌来劫持会话,他们就无法进入,但除非你有充分的理由不这样做,否则你应该只使用HTTPS。