在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