Golang实践录:使用gin实现http basic认证
Posted 李迟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang实践录:使用gin实现http basic认证相关的知识,希望对你有一定的参考价值。
本文介绍使用 Golang 语言实现 http basic 认证,并给出测试。
起因
接前文,按要求,接入内网环境的服务应用不能提供无任何验证方式的post接口,线上系统有相关的模块,但过于复杂。经讨论确定,使用 http basic 认证方式即可。
实现
思路:
- 调用
gin.BasicAuth()
创建需认证的路由组,账号密码由配置文件读取(可多个,本文示例略去)。 - 在该路由组下指定相应的URL及响应函数。
- 响应函数从
gin.Context
获取账号,与配置文件的对比,如不同,认证不通过,返回。否则继续后面处理流程。
关键代码示例:
import (
"net/http"
"github.com/gin-gonic/gin"
"conf"
)
func initRoutes(r *gin.Engine)
if conf.BasicAuthUser != "" && conf.BasicAuthPass != ""
authorized := r.Group("/auth", gin.BasicAuth(gin.Accounts
conf.BasicAuthUser: conf.BasicAuthPass,
// "aaa":"bbb",
// "ccc":"ddd",
))
authorized.POST("/testing", HandleTestingAuth)
authorized.GET("/testing", HandleTestingAuth)
return
func HandleTestingAuth(ctx *gin.Context)
if ctx.MustGet(gin.AuthUserKey).(string) != conf.BasicAuthUser
ctx.String(http.StatusUnauthorized, "")
return
ctx.String(http.StatusOK, "ok....")
其中,conf.BasicAuthUser
和conf.BasicAuthPass
分别是账号和密码变量。
测试
POST测试
$ curl -X POST localhost:9000/auth/testing -i -u latelee:12345678
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0HTTP/1.1 401 Unauthorized
Www-Authenticate: Basic realm="Authorization Required"
Date: Tue, 31 Jan 2023 16:06:28 GMT
Content-Length: 0
$ curl -X POST localhost:9000/auth/testing -i -u latelee:123456
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6 100 6 0 0 6376 0 --:--:-- --:--:-- --:--:-- 6000HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Tue, 31 Jan 2023 16:06:30 GMT
Content-Length: 6
ok....
GET测试
chrome浏览器会出现提示,用户名和密码正确后方显示页面。
客户端
使用 ajax 请求示例:
function calctest()
//console.log("param: ", $('#form1').serialize())
$("#commit").text("请求中");
$.ajax(
type: "POST",
dataType: "text",
url: "auth/testing",
authType: "Basic",
username: "latelee",
password: "123456",
data: $('#form1').serialize(),
success: function (result)
$("#commit").html(result);
,
error : function()
$("#commit").text("请求失败");
);
小结
本文使用的认证方式,实际上不安全,但胜在简单。定期改用户密码可减少风险。至于高阶的方式,后续再研究。
以上是关于Golang实践录:使用gin实现http basic认证的主要内容,如果未能解决你的问题,请参考以下文章
Golang实践录:使用gin框架实现转发功能:上传文件并转
Golang实践录:使用gin框架实现转发功能:上传文件并转
Golang实践录:使用gin框架实现转发功能:利用nginx转发