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

我很惊讶地发现关于这件事的讨论如此之少.我牢记如下答案,并尽量避免开发我自己的实现:

Authentication Form in ASP.Net

每个人都在单独编写自己的解决方案吗?

推荐答案

这个问题有很多观点--而且有一个很受欢迎的问题徽章--所以我知道这个话题有很多潜在的兴趣,很多人都在问完全相同的问题,但在互联网上找不到答案.

大多数可用的信息都会产生与手波浪一样的文本,作为"读者练习".)

不过,我终于找到了一个具体的例子,这个例子(慷慨地)是由高郎坚果邮件列表中的一位成员提供的:

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下的帖子登录到您的站点时,请确定密码是否有效.
  • 然后发布一个随机会话密钥,比如50个或更多加密随机字符和安全Cookie中的内容.
  • 将该会话密钥添加到UserSession表中.
  • 然后,当您再次看到该用户时,首先单击UserSession表,查看SessionKey是否包含有效的LoginTime和LastSeenTime,并且用户没有被删除.您可以将其设计为使计时器自动清除UserSession中的旧行."

Go相关问答推荐

如何存储来自异步Goroutine的返回值列表?

golang 的持久隐蔽服务

将这两个函数合二为一的惯用方法

如何为循环扫描的bufio scanner 设置超时?

如何测试 Zerolog 记录器引发类型错误的日志(log)事件?

使用 goroutine 比较 Golang 中的两棵树是等价的

如何在golang中使用viper获取对象的配置数组?

Golang Docker Selenium Chrome

是否可以在调试期间在 VSCode 中预览 github.com/shopspring/decimal 值?

Go struct 匿名字段是公开的还是私有的?

使用 Grafana alert 在几分钟内重复alert

golang 中的可变参数函数

NaN 是 golang 中的可比类型吗?

使用 AppID 在 Windows 中启动应用程序并获取 pid

如何在Go中替换符号并使下一个字母大写

Go:等待多个通道的性能损失

在 Golang 中获取谷歌云服务帐户的访问令牌?

如何使路径/不匹配 Golang net/http 中所有其他不匹配的路径

Dynamodb.ScanInput - 不能使用expr.Names()(类型 map[string]*string)作为类型 map[string]string

try 创建新的 etcdv3 客户端时出现pc error: code = Unavailable desc = error reading from server: EOF