sql - Google 登录,数据库端

标签 sql authentication accounts

我读过有关使用 Google 处理来自 this website 的登录的信息,但它并没有很好地解释数据库应该发生的事情。

通常对于数据库中的用户帐户,您将拥有像 id 这样的字段。 , username , password等等。根据我在链接中读到的内容,您最终将获得用户的 ID token ,其中有一个名为“sub”的键,其中有一个值,您可以使用它来识别用户。

我的问题是,这个“sub”将存储在数据库中的什么位置?
它会进入id吗? field ? Username field ?

我认为它不应该进入 username字段,因为有人创建的用户名可能与某人的 Google sub 完全相同ID。但是把它放在 id 中似乎也很奇怪。 field 。

此外,user accounts 中是否需要另一个字段?为了区分本地登录的用户和通过 Google 登录的用户,该表是一个 bool 值吗?

最佳答案

创建一个EXTERNAL_ID 列,并使用它来存储来自外部系统的标识符。您应该添加一个EXTERNAL_TYPE 列并将其设置为“GOOGLE”。当您要集成更多身份验证提供程序时,可以将其设置为不同的值(例如“OPEN_ID”、“FACEBOOK”。)

与外部系统交互时,始终需要存储外键/标识符,以便可靠地访问和更新外部记录。

外部 key 与本地数据库中的 ID 不同,它绝对不是用户名。它只是它自己的列,并且应该具有相当大的大小,以便可以存储遇到的任何外部 ID。

VARCHAR(64) 可能是一个好的开始,因为根据定义,我们不对标识符的类型或内容负责——这些是由外部系统提供和定义的。我们只需要保持它的值不变,在与外部系统对话时使用。

EXTERNAL_TYPE 字段可让您区分用户“本地注册”和“通过 Google 注册”或其他外部提供商。

例如:

create table "USER" (
    ID            int not null,
    USERNAME      varchar(64),
    DISPLAY_NAME  varchar(64),
    EMAIL         varchar(128),

    PWD_HASH      varchar(32),   -- "native" password, salted & hashed for security
    PWD_SALT      varchar(32),

    EXTERNAL_TYPE varchar(16),   -- external-auth Type & ID.
    EXTERNAL_ID   varchar(64),

    primary key (ID)
);

请注意,有些网站使用稍微高级一点的方案,用户既可以通过 Google 注册,也可以通过 native 密码登录。在这种情况下,通过一个凭据系统登录会检测到现有的电子邮件和其他凭据系统——这通常会提示用户使用其他凭据进行身份验证,链接它们并同时使用它们。这仍然基于 EXTERNAL_ID 和 EXTERNAL_TYPE 但可以将它们放在与 USER 相关的 USER_CREDENTIALS 表上,而不是 USER 表本身。

对于用户身份验证,也可以想象您可能需要一个额外的列来存储某种加密/ key / token 。不确定,只是一种可能。

关于sql - Google 登录,数据库端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18790808/

相关文章:

sql - 在过程中定义模式

ios - 如何在我的 'third party server' 上验证 GKLocalPlayer?

php - 如何在用户登录时显示用户特定功能?

具有多个帐户的 Git 在执行 ssh 时提供相同的用户名

javascript - 我可以在 Dynamics CRM 2016 的复合地址字段中添加两个选项字段吗?

php - MySQL查询 - 两行之间的差异

sql - 在 informix 中加入查询

.net - 如何从 ClaimsPrincipal 获取 SecurityToken?

c# - HTTP 状态 407 : Proxy authentication required Error when calling web service

如果满足某些条件则 MySQL 更新(或创建过程)