0

私は、Googleにドメインが登録されている大企業で働いています。すべてのユーザー認証は、Googleログインページを介して行われます

GAEでプロジェクトを実行していますが、これは(まだ)登録済みドメイン(https://appengine.google.com/a/MYDOMAIN.COM)内になく、appspot(http://mygreatapp.appspot )で実行されています。 com

私のアプリにアクセスできるようにするには、ユーザーは私たちのドメインにログインする必要があります。これは、GAEチュートリアルで提案されているように実現されます:(非常に単純化されたバージョンであり、実際のコードではありません)

UserService userService = UserServiceFactory.getUserService();
currentUser=userService.getCurrentUser();
if (currentUser==null){   //not yet logged-in, so we redirect to the Google login page
    String url=userService.createLoginURL(thisURL);
    HttpResponse.sendRedirect(url);
}else{
    String myOrg=ApiProxy.getCurrentEnvironment().getAttributes().get("com.google.appengine.api.users.UserService.user_organization");
    if (myOrg!="myOrganization"){
        /* We show an 'unauthorised access page', 
          with a link to the Google logout page */
    {
}

com.google.appengine.api.users.UserService.user_organization認証されたユーザーを取得したら、属性をチェックして、認証されたユーザーがドメインからのものであることを確認します。

正しく認証されると、ユーザーは、ある時点で、アプリ(GAE)に別のアプリに属する​​サービスにhttpリクエストを発行するように依頼できます。このサービス、ドメイン内にあり、認証されたユーザーが(ドメインから)アクセスする必要があります。 、 もちろん)。私はすでに完全に有効なユーザーを持っているので、*it*を使用してHttpリクエストを実行したいと思います。

したがって、明確にするために、私の質問は次のとおりです。

すでに認証されているユーザーを使用して外部サービスを呼び出すにはどうすればよいですか?


部分的な回答

私はほとんどそれを手に入れたと思います!

これが私がしていることです:

ユーザーは、基本的にサーブレットのように動作するjspページを介して私のアプリにアクセスします(つまり、HTTPRequestとHTTPResponseが利用可能です)。

認証されていないユーザーでアクセスが行われると、そのユーザーは次のおかげでgoogleログインページにリダイレクトされます。 userService.createLoginURL(HttpRequest.getRequestURI());

Googleの認証管理方法のおかげで、ユーザーがログインすると、ユーザーは自動的に私のjspページにリダイレクトされます。

サーバーがjspからの要求を受信すると、認証されたユーザーが自分の会社に属しているかどうかを確認します(「com.google.appengine.api.users.UserService.user_organization」属性を覚えておいてください)。それが本当なら、私はHTTPResquest()からすべてのCookieを取得し、 「 ACSIDHttpRequest.getCookies() 」という名前のCookieを探して保存します。

そこから、このCookieを使用して、ユーザーの認証が必要なWebアプリで電話をかけることができるはずです。

しかし、これは物事がうまくいかないところです。

  • 取得したCookieを使用してmygreatapp.appspot.comへのGET呼び出しをローカルで(たとえば、NetToolを使用して)シミュレートすると、すべてがスムーズに進みます。

  • Eclipseでローカルにアプリを実行し(実際にはログインできないためCookieがハードコーディングされている)、mygreatapp.appspot.comを呼び出すと、すべてがスムーズに進みます。

  • しかし、アプリをGoogleにアップロードして試してみると、認証に失敗します(実際には、回答として302 OKが表示され、ログインページへのロケーションヘッダーが表示されます)。デバッグするのはかなり難しいので、私は少し立ち往生しています。

誰が何が失敗する可能性があるかについての考えを持っていますか?

どうもありがとう!

最後に、私が達成しようとしていることに対する解決策がないことを認めなければなりません。Googleのセキュリティを破るのはそれほど簡単ではないことを証明しているので、それはある意味で実際には良いニュースです。問題は解決しました。

4

3 に答える 3

0

おそらく、App Engineドキュメントのこのセクションは関連していますか?

https://developers.google.com/appengine/docs/python/urlfetch/overview#Secure_Data_Connection

于 2013-02-07T22:19:53.783 に答える
0

Googleアカウントのサードパーティアプリの承認を確認する必要があります。

于 2013-02-08T05:43:55.127 に答える
0

私が正しく理解している場合は、Google Appsドメイン(「ドメイン」)でログインしているユーザーの資格情報を使用して、ドメインで実行されていないGAEアプリ(「アプリA」)がGAEアプリケーションにアクセスできるようにします(「ドメイン」)。 「アプリB」)はドメインで実行されており、すべての用途がドメインで認証されている必要があります。

これは悪い設計であり、機能しないはずです。

これがAppEngineで機能しない理由は、セッションCookieが特定のIPアドレス/範囲/ユーザーエージェントに関連付けられているためだと思います。

Cookieは元のドメインにのみ公開されるように設計されているため、アプリAにユーザーのセッションCookieを取得させる方法がよくわかりません。

それを行うための明白な方法は、oauthを使用することです。

于 2013-02-17T20:50:01.927 に答える