java - 使用 Scribe 构建 oauth 登录

标签 java facebook twitter oauth scribe

我读了太多的页面并尝试了抄写员示例,但我错过了最重要的一点 - oauth 身份验证的唯一且持久的用户 ID 是什么?

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

  1. servlet 向选定的授权提供商请求请求 token
  2. servlet 构造授权 URL 并将用户重定向到那里
  3. 用户授予权限
  4. 授权服务重定向到回调并将验证程序作为参数传递
  5. 回调的 servlet 向授权提供者请求访问 token

现在我可以在提供商的 API 中使用此访问 token ,例如浏览 Google 云端硬盘或发布恶意推文。很好,但我想要的只是获得某种可以存储在数据库中的 ID,并将其与用户帐户关联起来。这样当用户下次来时,我就能认出他。

我不认为访问 token 是我想要的。我运行了抄写员示例,该值随着每次调用而变化。

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

最佳答案

token 是不透明的。它们不包含用户信息。在这种情况下,每个人都会做的是使用 [USER_ID, ACCESS_TOKEN] 保留一个单独的数据库,以便当用户登录时您可以获取其访问 token 。如果您登录多个服务,也许您还需要一个SERVICE_NAME来将 twitter 与 google token 分开。

编辑

OAuth 不是一种身份验证或登录协议(protocol),它并不是这样设计的,尽管您可以通过临时扩展获取用户身份( Twitter 返回 user_id在访问 token 响应上)或发出进一步的请求,这将始终是黑客攻击。

也许更适合您的需求的是 OpenID (不幸的是,抄写员不会在这里帮助你)

关于java - 使用 Scribe 构建 oauth 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21122979/

相关文章:

java - testng - 获取包含失败测试的类的名称

java - 生成可执行的spring boot jar

android - RequestBatch.Callback onBatchCompleted() 未调用

twitter - 通过 REST API 在 Twitter 上获取状态并不总是返回媒体 URL

python - 无法使用 Python 将阿拉伯语解码的 Unicode 保存到 CSV 文件

java - Android 告诉我我的位图在我实际回收之前就被回收了

java - 实例状态未保存

facebook - 高效地从 Graph API 获取分享数

iphone - Facebook iOS SDK 3.5 模态提要对话框在 iPhone 中加载为空

ios - "linker command failed with exit code 1"当我通过 pod 添加新的 TwitterKit 时?