我有一个客户端测试应用程序和一个服务器应用程序,它们都托管在 GAE 上。客户端是一个简单的 Web 前端,服务器托管受 Oauth 保护的资源。身份验证通过 OpenId 进行,应用程序支持联合登录。问题是用户登录后,userService 似乎忘记了他们是谁(浏览器有一个 ACSID cookie,所以它记得)。
这是流程(来自 GAE 日志).... 用户首先在浏览器中输入 cktestclient.appspot.com(客户端应用程序)并按下 ShowMyCommitments 按钮。然后在服务器端日志(commitkeeperapi.appspot.com)中看到以下内容。
上午 9:10:22:/oauth/authorize?response_type=code&client_id=webappclient&redirect_uri= http://cktestclient.appspot.com/client/showStartPage&scope=CommitKeeper_Access 我们还没有登录,所以我们将在 9:10 被重定向:上午 22 点:/login/?continue= http://commitkeeperapi.appspot.com/oauth/authorize?response_type=code&client_id=webappclient&redirect_uri=http://cktestclient.appspot.com/client/showStartPage&scope=CommitKeeper_Access 然后我使用 url 登录由 createLoginURL 生成
上午 9:10:33:/oauth/authorize?response_type=code&client_id=webappclient&redirect_uri= http://cktestclient.appspot.com/client/showStartPage&scope=CommitKeeper_Access OAuth 继续进行,我们看到我们有一个登录用户 com.fourspires。 api.server.MyGaeAuthenticator 身份验证:当前用户(来自 userService)是:richardlandis@gmail.com
上午 9:10:34:/oauth/access_token 更多 Oauth Dancing... 获取 oAuthToken,在 cktestclient.appspot.com:/client/showStartPage 返回客户端 - 它继续在 commitkeeperapi.appspot.com:/v3 进行调用/承诺
上午 9:10:34:/oauth/validate Dancing... 验证与承诺请求一起发送的 oAuthToken
上午 9:10:36:/v3/commitments/?oauth_token=9491caca6c9ad2b2cb2d20a5cf2773ce22b99e076ff0dcb3a47d06e6a26038d5ccf63c66f1f2387e 现在我们回到服务器代码并检查用户 - 它是空的!
com.fourspires.api.util.UserHelpers getCurrentUser:UserServiceFactory.getUserService().getCurrentUser() = null
基于查看我在这个问题上可以找到的所有线程,我在服务器的 appengine-web.xml 中添加了 true - 但没有任何改变。
有谁知道为什么 UserService 丢失了我的用户的踪迹?我有一个解决这个问题的方法,但我有兴趣更多地了解为什么会失败。
PS - 这似乎与GWT 和 AppEngine 用户服务非常相似,但似乎尚未解决。