2

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 を使用しました。ディストリビューションのサンプルとして提供されている直接的な例があり、アプリ エンジンで魅力的に機能します。

4

1 に答える 1

2

これはおそらくあなたが聞きたいことではありませんが、私たちはそこにいて、OAuth 2 の OpenID を放棄しました。OpenID は認証用であり、OAuth は認可用であることを認識しています (この他の質問を参照)。両方の OAuth。

Scribe を使用しましたが、とても満足しています。これは、独自の認証ソリューションを展開し、おそらくプロバイダのリストを制限することを意味することに注意してください。それぞれの処理が異なるためです。

于 2012-12-08T20:43:04.637 に答える