EExcel 丞燕快速查詢2

EExcel 丞燕快速查詢2
EExcel 丞燕快速查詢2 https://sandk.ffbizs.com/
顯示具有 jwt 標籤的文章。 顯示所有文章
顯示具有 jwt 標籤的文章。 顯示所有文章

[轉]Go-JWT-RESTful身份认证教程

https://segmentfault.com/a/1190000020329813


1.什么是JWT
JWT(JSON Web Token)是一个非常轻巧的规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,
一个JWT由三部分组成,Header头部、Claims载荷、Signature签名,

JWT原理类似我们加盖公章或手写签名的的过程,合同上写了很多条款,不是随便一张纸随便写啥都可以的,必须要一些证明,比如签名,比如盖章,JWT就是通过附加签名,保证传输过来的信息是真的,而不是伪造的,

它将用户信息加密到token里,服务器不保存任何用户信息,服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证,


2.JWT构成
一个JWT由三部分组成,Header头部、Claims载荷、Signature签名,

Header头部:头部,表明类型和加密算法
Claims载荷:声明,即载荷(承载的内容)
Signature签名:签名,这一部分是将header和claims进行base64转码后,并用header中声明的加密算法加盐(secret)后构成,即:

let tmpstr = base64(header)+base64(claims)
let signature = encrypt(tmpstr,secret)

//最后三者用"."连接,即:
let token = base64(header)+"."+base64(claims)+"."+signature

gin-jwt 又更新了 renew again



1、Authenticator

old:Authenticator: func(userId string, password string, c *gin.Context)

New:

============================


type login struct {
Username string `form:"username" json:"username" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}


Authenticator: func(c *gin.Context) (interface{}, error) {
var loginVals login
if err := c.ShouldBind(&loginVals); err != nil {
return "", jwt.ErrMissingLoginValues
}
userID := loginVals.Username
password := loginVals.Password



2、authMiddleware

old:
authMiddleware := jwt.GinJWTMiddleware{

New:

authMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{

gin-jwt

1. Authenticator 回傳的 data
2. data 會丟入到 PayloadFunc
3. PayloadFunc 整理資料寫入 MapClaims
4. Authorizator 再拿 MapClaims 資料出來判斷


新版和舊版有地方不同

type xxxxx struct{
     aaaaaaa:string
}

1、
Authenticator: func(userId string, password string, c *gin.Context) (interface{}, bool) {

return xxxxx{aaaaaaa: ooooxxxx}   or   string


2、
PayloadFunc: func(data interface{})   jwt.MapClaims {

if v, ok := data.(xxxxx); ok {
  id = data.(xxxxx).aaaaaaa
}

return jwt.MapClaims{"aaaaaaa": ooooxxxx, "bbbbbbb": ooooxxxx}


3、
Authorizator: func(data interface{}, c *gin.Context) bool {

claims := jwt.ExtractClaims(c)
id := claims["aaaaaaa"].(string)

!注意!  Here data is string   fmt.Println(reflect.TypeOf(data))