Authentication 如何将社交登录集成到现有的用户模式/登录系统?

Authentication 如何将社交登录集成到现有的用户模式/登录系统?,authentication,database-design,login,oauth,single-sign-on,Authentication,Database Design,Login,Oauth,Single Sign On,我有一个多客户端连接的RESTful API(web、iOS和Android应用程序)。目前,用户只能创建具有用户名和密码的帐户(电子邮件是可选的),并且它们在数据库中以这些列表示 用户通过我们的API“登录”到A/session端点。API响应是一个新的秘密令牌(我们将其与用户名关联)。客户端使用此令牌对客户端发起的所有POST请求进行签名,我们的API随后将使用这些POST请求对请求进行身份验证 但是,我们现在希望允许社交登录(Google+、FB、Twitter)。我们的用户也希望为了方便

我有一个多客户端连接的RESTful API(web、iOS和Android应用程序)。目前,用户只能创建具有用户名和密码的帐户(电子邮件是可选的),并且它们在数据库中以这些列表示

用户通过我们的API“登录”到A/session端点。API响应是一个新的秘密令牌(我们将其与用户名关联)。客户端使用此令牌对客户端发起的所有POST请求进行签名,我们的API随后将使用这些POST请求对请求进行身份验证

但是,我们现在希望允许社交登录(Google+、FB、Twitter)。我们的用户也希望为了方便而使用社交登录,但更希望他们选择自己的随机用户名显示在评论旁边,等等

我的问题:为了支持社交登录,我需要对API进行哪些更改?我是否需要对数据库模式进行重大更改以支持这一点?如果需要,具体是什么?此外,服务器是否需要了解社交登录提供商授予的访问令牌

请注意,此功能的范围不包括将多个社交登录帐户与同一个人关联的功能。我想让事情尽可能简单

通常对如何正确实施这一点感到困惑。我更愿意让事情尽可能简单,所以对于一个简单的解决方案,我会多加一些分数。任何建议都将不胜感激。

  • 我也有同样的问题
  • 我需要Facebook Twitter谷歌和GitHub登录
  • 让我们看看这是如何工作的
  • 我有两个表,一个用户表和一个社交令牌表
  • 我的用户表如下所示
用户(用户id整数、昵称varchar(64)、电子邮件varchar(255)、密码varchar(64)、电子邮件验证布尔值、启用布尔值、在时间戳创建、在时间戳更新)

  • 这里需要注意的是,user_id是主键,昵称是唯一的,email是唯一的,email_verified的默认值为FALSE,enabled的默认值为TRUE,由于社交登录,密码是可选的

  • 我的social_tokens表如下所示

社交令牌(提供者用户id varchar(255),提供者类型enum('facebook','twitter','google','github'),用户id整数,访问令牌varchar(255),刷新令牌varchar(255),过期时间戳,在时间戳创建,在时间戳创建)

  • 提供者\用户\ id是社交网络分配给每个用户的唯一id
  • provider_type是一个枚举,在我的例子中有4个值:facebook、twitter、google和github
  • 用户id引用用户表中的用户id
  • access_令牌和refresh_令牌(如果提供)只是由提供者分配的令牌
  • 谷歌似乎有过期的概念,所以我也添加了一个expires列,其余的都是可选的
  • 主键是(provider\u user\u id、provider\u type、user\u id)的组合,因为单个用户可能有多个社交登录,因此user\u id不能作为主键
  • 虽然可以说提供者\用户\ id对于给定社交网络中的每个用户都是唯一的,但不同的社交网络又如何呢?因此,组合

  • 其想法是,每个用户可能有多个社交登录

  • 如果你有推特abc@gmail.com还有Facebookabc@gmail.com如果您至少通过这两种方式登录一次,它们现在都是您登录的一部分

你找到解决办法了吗?很好。感谢您回答一个6岁的问题:)6年前,我是一名移动开发人员,2年前刚刚启动web开发,因此能够回答这个问题:)