在Go中如何pipe理身份validation?

对于在Go中构buildRESTful API和JS前端应用程序的人员,您如何pipe理身份validation? 你使用任何特定的库或技术?

我很惊讶地发现这么less的讨论。 我记住下面的答案,并试图避免开发自己的实现:

ASP.Net中的身份validation表单

每个人都分别编码自己的解决scheme吗?

这个问题得到了很多的意见 – 并有一个普遍的问题徽章 – 所以我知道这个话题有很多潜在的兴趣,许多人都问完全相同的事情,没有findInterwebs的答案。

大部分可用信息的结果都是文本上的等同于手形的东西,留作“读者的练习”。 ;)

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

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

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

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

摘录(和重新格式化):


“我会build议像下面这样的devise:

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下的POSTlogin到您的站点时,确定密码是否有效。
  • 然后发出一个随机的会话密钥,说50或更多的encryption兰特字符和东西在一个安全的Cookie。
  • 将该会话密钥添加到UserSession表。
  • 然后,当你再次看到那个用户时,首先点击UserSession表,查看SessionKey是否有一个有效的LoginTime和LastSeenTime,而用户不被删除。 你可以devise它,所以定时器会自动清除UserSession中的旧行。

您将使用中间件来执行身份validation。

您可以尝试使用go-http-auth进行OAuth2的基本和摘要式身份validation和gomniauth 。

但如何authentication真的取决于你的应用程序。

身份validation在你的http.Handlers中引入了状态/上下文,最近有一些讨论。

上下文问题的众所周知的解决scheme是这里描述的大猩猩/上下文和谷歌上下文 。

我做了一个更通用的解决scheme,而不需要全局状态的继续/包装 ,可以一起使用,也可以不使用其他两个,并与上下文无关的中间件很好地集成。

wraphttpauth提供go-http-auth与go-on / wrap的集成。

另一个可能的解决scheme是最近在邮件列表上宣布的Authboss 。

(我还没有试过使用这个库。)

另请参阅使用用户身份validation制作Web应用程序的最佳方法?

另一个处理cookievalidation的开源软件包是httpauth 。

(顺便说一下,我写的)

我很惊讶没有人提到展开/安全

从他们的github页面: 安全是一个Go的HTTP中间件,有利于一些快速的安全胜利。 这是一个标准的networking/ HTTP处理程序,可以用于许多框架或直接与Go的networking/ HTTP包。

它集成了几个框架 ,包括(但不限于)chi,Echo,Gin,Goji,Iris和Negroni