使用Scribe构建oauth登录

时间:2014-01-14 20:09:08

标签: java facebook twitter oauth scribe

我已经阅读了太多页面并尝试了划线样本,但我错过了最重要的一点 - oauth身份验证的唯一且持久的用户ID是什么?

我想实现用户可以使用Google,FB,Twitter等登录的网站。我希望这个流程是:

  1. servlet向选定的授权提供程序请求请求令牌
  2. servlet构造授权URL并将用户重定向到那里
  3. 用户授予权限
  4. 授权服务重定向到回调并将验证者作为参数传递
  5. callback的servlet要求授权提供程序访问令牌
  6. 现在我可以在提供商的API中使用此访问令牌,例如浏览谷歌驱动器或发布恶意推文。很好,但我想要的是获得某种我可以存储在数据库中的ID并将其与用户帐户相关联。因此,当用户下次来时,我可以认出他。

    我认为访问令牌不是我想要的。我运行了划线示例,每次调用时此值都会发生变化。

    我会找到一些返回用户登录名的提供者API,并在每次登录时调用它吗?我不喜欢这个想法,因为这是(在我看来)每次登录的额外HTTP连接。例如谷歌驱动器示例将返回一堆数据,当我只需要几个字符。我想我错过了一些重要的观点。或者这是真的这样设计的吗?

1 个答案:

答案 0 :(得分:1)

令牌是不透明的。它们不包含用户信息。在这种情况下,每个人都做的是使用[USER_IDACCESS_TOKEN]保留一个单独的数据库,因此当用户登录时,您可以获取它的访问令牌。如果您登录多个服务,也可能需要SERVICE_NAME来将Twitter与Google令牌分开。

修改

OAuth不是身份验证或登录协议,它并非设计为一个,而您可以通过ad-hoc扩展程序获取用户身份(Twitter返回user_id访问令牌响应)或进一步请求,它将永远是一个黑客。

或许更适合您的需求是OpenID(不幸的是,抄写员不会帮助您)