2

クライアント テスト アプリとサーバー アプリがあり、どちらも GAE でホストされています。クライアントは単純な Web フロント エンドであり、サーバーは Oauth によって保護されたリソースをホストします。認証は OpenId を介して行われ、アプリケーションは Federated Login をサポートします。問題は、ユーザーがログインした後、userService がユーザーが誰であるかを忘れているように見えることです (ブラウザーには ACSID Cookie があるため、覚えています)。

(GAE ログからの) フローは次のとおりです。ユーザーはまず、cktestclient.appspot.com (クライアント アプリ) をブラウザーに入力し、ShowMyCommitments ボタンを押します。次に、サーバー側のログ (commitkeeperapi.appspot.com) に次のように表示されます。

9:10:22 AM: /oauth/authorize?response_type=code&client_id=webappclient&redirect_uri= http://cktestclient.appspot.com/client/showStartPage&scope=CommitKeeper_Access まだログインしていないため、リダイレクトされます 9:10: 22 AM: /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 AM: /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 AM: /oauth/access_token さらに Oauth ダンシング... oAuthToken を取得し、cktestclient.appspot.com:/client/showStartPage でクライアントに戻ります - commitkeeperapi.appspot.com:/v3 で呼び出しを続けます/コミットメント

9:10:34 AM: /oauth/validate Dancing... コミットメントのリクエストで送信された oAuthToken を検証しています

9:10:36 AM: /v3/commitments/?oauth_token=9491caca6c9ad2b2cb2d20a5cf2773ce22b99e076ff0dcb3a47d06e6a26038d5ccf63c66f1f2387e サーバー コードに戻って、ユーザーを確認すると、null です。
com.fourspires.api.util.UserHelpers getCurrentUser: UserServiceFactory.getUserService().getCurrentUser() = null

この問題に関するすべてのスレッドを確認した結果、サーバーの appengine-web.xml に true を追加しましたが、何も変わりませんでした。

UserService がユーザーの追跡を失った理由を知っている人はいますか? この問題の回避策はありますが、これが失敗する理由についてもっと知りたいと思っていました。

PS - これはGWT および AppEngine User Service と非常に似ているようですが、解決されていないようです。

4

1 に答える 1

0

その答えは、私が行う 2 つの要求が、異なる環境を持つ異なる ApiProxy によって処理されているため、現在のユーザーが誰であるかについての理解が異なるためだと思います。2 つの異なる ApiProxy を取得している理由は正確にはわかりませんが、それについてさらに調査することはできます。

于 2012-07-16T19:12:16.903 に答える