对接口进行访问控制 | Go 语言编程之旅
utterances-bot opened this issue · 12 comments
对接口进行访问控制 | Go 语言编程之旅
2.8 对接口进行访问控制 在完成了相关的业务接口的开发后,你正打算放到服务器上给其他同事查看时,你又想到了一个问题,这些 API 接口,没有鉴权功能,那就是所有知道地址的人都可以请求该项目的 API 接口和 Swagger 文档,甚至有可能会被网络上的端口扫描器扫描到后滥用,这非常的不安全
https://golang2.eddycjy.com/posts/ch2/08-api-access-security/
2.8 对接口进行访问控制,在main函数中修改其 setupSetting 方法时,未对pkg/setting中的section和setting文件进行修改
如果这个blog_auth作为用户表,那是不是不应该把app_secret放到jwt里面返回给调用者.
curl -X post -H 时BindAndValid解析不了参数,需要修改为-d "xx=xx"
这里目录也除了一点小问题。2.8.4.2 新建model对象 2.8.4.2 初始化配置 -》应为 2.8.4.3 初始化配置。
2.8.4.2 节代码中.
err = s.ReadSection("JWT", &global.JWTSetting)
目前应该为
err = setting.ReadSection("JWT", &global.JWTSetting)
不知道为什么 post请求不了,这个问题折磨一天了,然后 看了官方文档发现是构造的指令错了??? 具体我也不懂 反正这条有效果
curl -v -X POST 'http://127.0.0.1:8000/auth?app_key=eddycjy&app_secret=go-programming-tour-book'
2.8.6.7中curl -H传参不能使用,可以更换为 curl -X POST -d 'app_key=eddycjy' -d 'app_secret=go-programming-tour-book' 127.0.0.1:8000/auth 即可
curl -X POST http://127.0.0.1:8000/auth -d app_key=eddycjy -d app_secret=go-programming-tour-book
func TestTokenParse(t *testing.T) {
payload, _ := base64.StdEncoding.DecodeString("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfa2V5IjoiMjc1NjY4YmE2NTUwNDljZDczOWQxZDllNmIzMWNjZjEiLCJhcHBfc2VjcmV0IjoiN2M5NzI2NjMxNzBkNmJjMTg0ODRkMDViYzk4NzIyZjQiLCJleHAiOjE2Mzg4MDg2OTksImlzcyI6ImJsb2ctc2VydmljZSJ9.tHkJK1PTJEswWIkHA-oLQe811UfEZ13PJYzOUbn7huQ")
log.Println(string(payload))
}
得到的结果是: {"alg":"HS256","typ":"JWT"}
并没有暴露出重要信息啊~
注意:SigningMethodHS256
和 SigningMethodES256
SigningMethodHS256
的参数使用 key.([]byte)
断言
SigningMethodES256
的参数key
描述 key must be an ecdsa.PrivateKey struct
请问c.GetHeader("token") , 这直接将token放在到header参数token中,与通常放“Authorization”中有什么区别?哪种方式好点?
没有用c.ShouldBind替换成了ShouldBindHeader,AuthRequest中的formtag换成header可以解析param