小编典典

人们如何在 Go 中管理身份验证?

all

对于那些在 Go 中构建 RESTful API 和 JS 前端应用程序的人,您如何管理身份验证?您是否使用任何特定的库或技术?

我很惊讶发现关于这个的讨论如此之少。

每个人都分别编写自己的解决方案吗?


阅读 60

收藏
2022-07-02

共1个答案

小编典典

这个问题获得了大量的观点——并且有一个热门问题徽章——所以我知道这个话题有很多潜在的兴趣,很多人都在问同样的问题,但在互联网上没有找到答案。

大多数可用信息都产生了与挥手动作相同的文本,作为“读者练习”。;)

然而,我终于找到了一个具体的例子,(慷慨地)由 golang-nuts 邮件列表的成员提供:

https://groups.google.com/forum/#!msg/golang-
nuts/GE7a_5C5kbA/fdSnH41pOPYJ

这提供了建议的模式和服务器端实现作为自定义身份验证的基础。客户端代码仍然取决于您。

(我希望帖子的作者看到这个:谢谢!)

摘录(并重新格式化):


“我会建议类似以下设计:

create table User (
 ID int primary key identity(1,1),
 Username text,
 FullName text,
 PasswordHash text,
 PasswordSalt text,
 IsDisabled bool
)

create table UserSession (
 SessionKey text primary key,
 UserID int not null, -- Could have a hard "references User"
 LoginTime <time type> not null,
 LastSeenTime <time type> not null
)
  • 当用户在 TLS 下通过 POST 登录您的站点时,请确定密码是否有效。
  • 然后发出一个随机会话密钥,比如 50 个或更多加密货币字符和安全 Cookie 中的内容。
  • 将该会话密钥添加到 UserSession 表中。
  • 然后,当您再次看到该用户时,首先点击 UserSession 表以查看 SessionKey 是否在其中并具有有效的 LoginTime 和 LastSeenTime 并且用户未被删除。你可以设计它,让计时器自动清除 UserSession 中的旧行。”
2022-07-02