0

昔ながらの頭をOAuthに巻きつけて…。

要求/応答の仕組みと承認/認証のラウンドトリップ(私が理解していると思います)を除いて、ユーザーが(実際には、そうでない場合)、MyUserオブジェクト(含まれている可能性があるものは何でも)をOAuthトークンにマッピングするのに苦労していますブラウザにドロップした可能性のあるCookie(暗号化されているかどうかに関係なく)をすべて削除します。

元のログインでMyUser情報を取得します(私のサイトでは「登録」と呼びます)が、MyUserが戻ってきて、すべてのCookieがなくなったため、彼は「ユーザー」にすぎません。当然のことながら、ユーザーはOAuthログインを再度実行する必要がありますが、新しいトークン/シークレットをMyUserデータに関連付ける方法がありません。

私は何が欠けていますか?

---2012年8月2日編集-----

これを言い換えさせてください(私はこれについて厚くしていると確信していますが、それがここでの目的であると思います):

返信で指摘されているように、各OAuthプロバイダーには独自のメカニズムがあります。それらをナビゲートして、ユーザーのアクセストークンを取り戻すことができます。

ヒーローがFacebookを使用して私のサイトに登録するとします。FBは、アクセストークンとともに自分のFBユーザーIDと名前を返します。私たちは彼のFBメールをリクエストして受け取るのに十分賢いです、そして私たちは彼を入れる前に彼に他の登録qを尋ねます。それから私たちはこれを私たちのデータストア(私たち自身のユーザーレコードにリンクされています)に保存します:

OurUserId : 1234
oAuthProviderName : Facebook
oAUthProviderUserId: xxxxx
oAuthProviderUserEmail: hero@mlb.com
oAuthProviderUserName: iBeHero
oAuthToken: entracingly-unique-string-of-goop
oAuthSecret: moredata
.... etc.

そして、彼をユーザー番号1234として識別するためのCookieを設定します。

今、ヒーローは去り、何らかの理由で彼のクッキーを殺し、そして私たちに戻ってきます。

今、彼はツイッターでログインすることにしました。私はクッキーを持っていないので、彼が誰であるかわかりません。そして、私たちは再びプロセスを通過します。

私には彼は新しいユーザーのように見えるので、Twitterが私にトークンを送信すると、私は彼に登録の質問をし始めますが、明らかに正しくありません。

TwitterはEメールアドレスを返さないので、私はそれに一致することができません。たとえそれらが返したとしても(他のほとんどの人はそうすると思います)、Herolikleyは複数のEメールを持っています。

2つ(またはいくつでも)のログインの間にある唯一の結びつきは、削除されていない設定したCookieだけであるように思われます。

OAuth2.0メカニズム全体がこれにかかっていると言っていますか?私はそれが正しいとは信じられませんが、別の方法が見当たらないので、何かが足りないに違いありませんね。

4

1 に答える 1

3

OAuth をログイン メカニズムとしても使用している場合は、通信しているプロバイダがユーザーの安定した ID を返す何らかの方法を備えていることを確認してください。その ID は、DB でユーザーを検索するために使用するキーです。

これを行う方法は、プロバイダーによって異なります。Google の場合、OAuth 2.0 で認証を行う方法の詳細については、こちらを参照してください。Twitter の場合、OAuth 1.0 を使用し、コードをアクセス トークンに交換するときにユーザー ID を返します。Facebookにも独自の方法があります。

于 2012-08-02T17:39:32.500 に答える