Google App Engine用户服务如何在内部运作?

时间:2010-12-13 15:36:49

标签: java google-app-engine authentication

我只是对Google应用引擎的用户服务如何运作感到好奇。我理解它的方式,登录状态的用户存储在cookie中。要获取cookie,必须有一个http servlet请求对象(至少对于java servlet)。但是用户服务api不需要任何http servlet请求作为输入,那么如何让cookie检查用户是否已登录?

2 个答案:

答案 0 :(得分:3)

在请求期间,用户通过Google的servlet实现设置is handled

  

[我]用户登录并使用标准servlet API获取用户的电子邮件地址或OpenID标识符,并使用请求对象的getUserPrincipal()方法。

在登录过程中,服务使用重定向,类似于OpenID或OAuth。在整个登录过程中查看URL。

  1. 用户会在您的应用上重定向到由App Engine处理的网址,例如:

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething

  2. 登录处理程序重定向到Google登录服务,例如:

    https://www.google.com/accounts/ServiceLogin?service=ah&continue=http://app.appspot.com/_ah/login%3Fcontinue%3Dhttp://app.appspot.com/dosomething&ltmpl=gm&ahname=Your+App+Name&sig=hf3322hdsk98fd8fh3u29hfh24as

  3. 您登录后,Google会将您重定向回应用引擎登录处理程序:

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething

    当Google重定向时,一些查询参数将传递给App Engine登录处理程序,内置登录处理程序将设置cookie。

  4. 然后,您将被重定向到您指定的URL或“开始”的位置。类似的东西:

    http://app.appspot.com/dosomething

答案 1 :(得分:3)

后续电话怎么样?例如(从第4点开始)

  1. 用户调用servlet http://app.appspot.com/dosomethingelse
  2. 在servlet dosoemthingelse中,我可以再次像这样调用UserService

    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();
    String userId = user.getUserId();
    

    此userService实例如何获取cookie以了解谁是当前登录的用户?