私は、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のセキュリティを破るのはそれほど簡単ではないことを証明しているので、それはある意味で実際には良いニュースです。問題は解決しました。