16

Web アプリケーションに OpenId ログインを実装しようとしています。OpenId を介してログインする新しいユーザーは常に、システム上に新しいユーザーを作成し、データの中に openid URL を保存して、次回そのユーザーでログインするようにします。

これを Gmail OpenID でテストしています。問題は、これを行うたびに、Google が別の openid URL、つまりhttps://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTimeを送信することです。

もちろん、これが新しいユーザーかどうかはわかりません。私は少し困惑しています: openid 識別子は常に同じままであるべきではありませんか?

4

1 に答える 1

19

Google の OpenID 識別子は多かれ少なかれ、要求元のホスト (より正確openid.realmにはプロバイダーに送信されたパラメーター) を含む複数のデータのハッシュ表現です。したがって、ホストが時々変更されると (ポートや IP アドレスの変更など)、ID も時々変更されます。StackOverflow は、この問題に対しても回避策を使用しています。これらの投稿を確認してください:

これは、Google からの FAQ の抜粋です。

Q: OpenID の仕様では、openid.realmはオプションであり、指定されていない場合、Google はopenid.return_to代わりに URL を使用する必要があると書かれています。それはうまくいきますか?

A: プロトコルが正常に完了するという意味で機能します。しかし、あなたのreturn_toURL が のようなものであるwww.example.com/authenticate?style=openid-federated_login場合、あなたのサイトの特定のアドレスを承認して信頼するようユーザーに求めることになり、ユーザー フレンドリーではありません。また、openid.realmパラメータを省略すると、URL を変更できなくなりreturn_toます。また、Google アカウント ユーザーのレルムと URL 識別子も暗黙的に変更されます。

于 2010-04-21T16:21:47.933 に答える