结束语我老式的头周围的OAuth ....的OAuth2用户映射和失去我的饼干
从请求/响应机制和授权/身份验证往返(我想我underdstand)我奋力除了如果(实际上当,而不是如果)用户杀死我可能在浏览器上丢弃的任何cookie(加密的或其他的),则将MyUser对象(可能包含的任何内容)映射到OAuth令牌。
我在原始登录中获取MyUser信息(称为“注册”为我的网站),但现在MyUser回来了,所有的cookies都消失了,所以他只是'用户'。足够公平,用户必须再次进行OAuth登录,但现在我无法将新令牌/秘密与MyUser数据相关联。
我错过了什么?
---编辑八月2/2012 -----
让我重申这一点(我敢肯定我是厚约这一点,但我猜这是在这里什么):
由于在回帖中指出,每个OAuth提供者都有自己的机制。我们可以导航这些并获取用户的访问令牌。
可以说英雄在我的网站上使用Facebook注册。 FB返回他的FB UserID和Name以及Access Token。我们是足够聪明的请求,并得到他的FB电子邮件,我们问他一些其他注册q的值让他在那之前,我们把它保存在我们的数据存储(链接到我们自己的用户记录):
OurUserId : 1234
oAuthProviderName : Facebook
oAUthProviderUserId: xxxxx
oAuthProviderUserEmail: [email protected]
oAuthProviderUserName: iBeHero
oAuthToken: entracingly-unique-string-of-goop
oAuthSecret: moredata
.... etc.
,并设置一个饼干,以识别他为我们的用户#1234.
现在英雄消失,出于某种原因杀死他的饼干,然后回到我们身边。
现在他决定用Twitter登录。我没有cookie,所以我不知道他是谁,然后我们再次完成这个过程。
对我来说,他看起来像一个新用户,所以一旦Twitter给我一个令牌,我开始问他注册问题,显然不对。
原来,Twitter并没有返回电子邮件地址,所以我无法与之相匹配,即使他们这样做(我认为几乎所有人都这样)英雄似乎有多个电子邮件。
在我看来,我在两个(或多个)登录之间唯一的联系是我设置的没有被删除的cookie。
我们是说整个OAuth2.0机制都挂在这个上面吗?我无法相信那是对的,但是看不到另一种方式,所以我必须错过某些东西,是的?
感谢您的回复,不完全是我所问,虽然我可以看到为什么..我要编辑的问题更清楚! – Serexx 2012-08-02 20:04:19
@Serexx在编辑完成后,Steve的回答仍然完全正确。 OAuth是* Authorization *的标准。您有权代表用户访问数据。通过访问标识用户的数据(取决于提供商,而不是OAuth标准的一部分),您可以*认证他(例如通过请求他的用户ID)。因此,只需询问用户ID,检查ID是否已存在于您的数据库中,然后对其作出反应(例如,设置新的cookie)。 – 2012-08-02 20:50:24
当用户第一次使用Facebook登录(认证自己并授权我)时,我现在被授权从Google获取数据,但除非我错过了一点(很可能),Google不会给我任何可以让我在我的数据存储中识别原始的基于Facebook的记录的东西。为了简化,为什么这是不正确的?当你说'请求用户名'时,你是说再次询问/ user /? – Serexx 2012-08-03 05:21:29