7

数か月前に Google App Engine から移行しました。しかし、ユーザーは GAE の user_id 属性によって識別されるため、認証にはまだ依存しています。

この目的のために、私の(現在は外部の)アプリケーションは、暗号化され、署名され、タイムスタンプが付けられたログイン リクエストを使用して、ユーザーを Google App Engine アプリケーションにリダイレクトします。次に、GAE アプリケーションは、GAE の「ユーザー」サービスを使用してログインを実行します。GAE に正常にログインした後、ユーザーは外部アプリケーションへの暗号化され、署名され、タイムスタンプが付けられた応答を使用して再度リダイレクトされます。基本的な実装は、ここここにあります。ご覧のとおり、これは非常に基本的なものであり、パフォーマンスの低下につながる大量の暗号化に依存しています。

私の外部アプリケーション (この場合は Django アプリケーション) は、user_id を user テーブルの password フィールドに格納しています。user_id 以外に、GAE からメール アドレスのみを取得して、ユーザー名とメールを Django に保存します。

ここで、GAE サービスへの依存を取り除きたいと思います。頭に浮かぶ最初のアプローチは、おそらく各ユーザーに電子メールを送信して、新しいパスワードを設定するように要求し、Django を使用して独自の認証を実行することです。

ユーザーにとって実際に違いがないように、Google の OpenID サービスに依存するソリューションを希望します。Google カレンダー API の AuthSub トークンを取得するには、とにかくユーザーを Google に送信する必要があるため、これも推奨されます。

問題は、GAE を使用せずに特定の Google アカウントの GAE user_id 属性を取得する方法が見つからなかったことです。OpenID と他のすべての認証プロトコルは、異なる識別子を使用します。

ここで問題となるのは、Google は、この目的に使用できる API をまだ提供していないかどうかです。ユーザー アカウントを移行する方法について、他に考えられる解決策やアイデアはありますか?

前もって感謝します!

4

4 に答える 4

2

これを行う最善の方法は、ユーザーに「移行」インタースティタルを表示することです。これにより、ユーザーは Google OpenID プロバイダーにリダイレクトされ、そこでサインインするように求められます。両方の場所でサインインしたら、2 つのアカウントを照合して、今後 OpenID 経由でログインできるようにします。

于 2012-04-05T05:58:50.797 に答える
1

AFAIK、GoogleアカウントとGoogleOpenIDの間の唯一の共通の識別子は電子メールです。

  1. ユーザーが現在のgae設定を介してGoogleアカウントにログインしたときにメールを受け取ります。を使用しUser.email()ます。このメールをユーザーデータと一緒に保存します。

  2. すべての(ほとんどの)ユーザーのメールがある場合は、GoogleOpenIDに切り替えます。ユーザーがログインしたら、電子メールアドレスを取得し、データベースでこのユーザーを見つけます。

于 2012-04-04T13:37:58.390 に答える
1

ハイブリッドアプローチを試してみませんか:

  1. OpenIdに切り替えます
  2. アプリケーションがすでにuserIdを知っている場合は、これで完了です。
  3. ユーザーに尋ねない場合、移行するアカウントを持っているかどうか
  4. はいの場合は、古いメカニムで彼にログインし、アカウントを転送します
  5. 新しいアカウントを作成しない場合
于 2012-04-25T20:30:59.497 に答える
0

Googleには、OpenID認証リクエストが成功したときにパラメータとして返される一意の識別子(* openid.claimed_id *)があります。OpenIDの使用に切り替えると、基本的に、ユーザーが新しいメソッドを使用して初めてログインしたときに、ユーザーがログインエクスペリエンスについて何も違うことに気付かずに、user_idをこのパラメーターと交換できます。

認証プロセスのドキュメントの概要はここにあります。ハイブリッドOpenID+OAuthアプローチを使用して、リクエストトークンを特定のIDに関連付けることができるようにすることをお勧めします。次に、戻ったときに、openid.claimed_idが元のリクエストトークンと一致することを確認します。

于 2012-04-04T19:07:24.193 に答える