Google AppEngine Java で連携ログインを実装する際に問題があります。 https://developers.google.com/appengine/articles/openid
ユーザーサービスを取得し、現在のユーザーを取得しています。現在のユーザーが null の場合、ユーザー サービスに、選択したオープン ID プロバイダーを使用してログイン URL を作成するように依頼します (最終的には、ユーザーが選択できるようになります)。これがコードスニペットです
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if(user == null)
{
userService.createLoginURL(request.getRequestURI(),null,"yahoo.com",null);
//do a redirect
}
メソッドの 3 番目のパラメーターUserService.createLoginURL(....)
は federatedIdentity です (こちらを参照)。この引数については、これまで値"yahoo.com", "http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds", "https://openid.stackexchange.com/"
を使用してきましたが、常に Google アカウントのログイン ページにリダイレクトされています。また、これらの引数で返される URL が、パラメータなしで生成されたものとは少し異なることにも気付きました。
ここで間違いを犯していると思いますが、どこにあるのかわかりません。ユーザーがそれぞれのプロバイダーのログインページにリダイレクトされるようにするには、そのパラメーターに正確に何を渡す必要がありますか? たとえば、yahoo、stackoverflow、facebook などです。
拡張的な質問として、ユーザーが認証されて承認が求められると、App Engine は次回要求されたときに UserService.getCurrentUser() を介してそのユーザーを自動的に返すと思います。私は正しいですか?
記録のために、アプリケーション設定で「認証タイプ」を「Federated Login」に設定しました。
2012 年 12 月 5 日更新: openid4java を使用しました。ディストリビューションのサンプルとして提供されている直接的な例があり、アプリ エンジンで魅力的に機能します。