美文网首页
再谈认证和授权

再谈认证和授权

作者: 追风骚年 | 来源:发表于2020-07-14 18:35 被阅读0次

https://github.com/appleboy/gin-jwt

gin 有个 jwt 的库,类库其中的一个 middleware 是这样定义的


    // the jwt middleware
    authMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{
        Realm:       "test zone",
        Key:         []byte("secret key"),
        Timeout:     time.Hour,
        MaxRefresh:  time.Hour,
        IdentityKey: identityKey,
        PayloadFunc: func(data interface{}) jwt.MapClaims {
            if v, ok := data.(*User); ok {
                return jwt.MapClaims{
                    identityKey: v.UserName,
                }
            }
            return jwt.MapClaims{}
        },
        IdentityHandler: func(c *gin.Context) interface{} {
            claims := jwt.ExtractClaims(c)
            return &User{
                UserName: claims[identityKey].(string),
            }
        },
        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

            if (userID == "admin" && password == "admin") || (userID == "test" && password == "test") {
                return &User{
                    UserName:  userID,
                    LastName:  "Bo-Yi",
                    FirstName: "Wu",
                }, nil
            }

            return nil, jwt.ErrFailedAuthentication
        },
        Authorizator: func(data interface{}, c *gin.Context) bool {
            if v, ok := data.(*User); ok && v.UserName == "admin" {
                return true
            }

            return false
        },
        Unauthorized: func(c *gin.Context, code int, message string) {
            c.JSON(code, gin.H{
                "code":    code,
                "message": message,
            })
        },
        // TokenLookup is a string in the form of "<source>:<name>" that is used
        // to extract token from the request.
        // Optional. Default value "header:Authorization".
        // Possible values:
        // - "header:<name>"
        // - "query:<name>"
        // - "cookie:<name>"
        // - "param:<name>"
        TokenLookup: "header: Authorization, query: token, cookie: jwt",
        // TokenLookup: "query:token",
        // TokenLookup: "cookie:token",

        // TokenHeadName is a string in the header. Default value is "Bearer"
        TokenHeadName: "Bearer",

        // TimeFunc provides the current time. You can override it to use another time value. This is useful for testing or if your server uses a different time zone than your tokens.
        TimeFunc: time.Now,
    })

Authenticator 和 Authorizator 开始我没有弄明白,为什么需要两个函数,后来仔细推敲了一下作者想表达的正是认证和授权,用户登录到系统是一个认证的过程,不能通过认证则是 401,登录之后打开某个页面看见某个资源是一个授权的过程,不可以看见某个资源则是 403

相关文章

  • 再谈认证和授权

    https://github.com/appleboy/gin-jwt gin 有个 jwt 的库,类库其中的一个...

  • Session攻击

    认证和授权 很多时候,人们会把“认证”和“授权”两个概念搞混,实际上“认证”和“授权”是两件事情,认证的英文是Au...

  • 网络中的Auth身份认证和授权

    1. 认证和授权 首先,需要对齐概念:认证:authentication(AuthN),身份认证授权:author...

  • 认证和授权

    用户url传入的token认证 urls.py views.py 请求头认证 urls.py views.py 多...

  • (认证、授权和记账)简介

    AAA(身份验证,授权和记账)简介 AAA服务器 AAA是认证,授权和计费(认证,授权,计费)的三个英文字的缩写。...

  • 再谈授权

    在看《高效能人士的七个习惯》之前,其实我从来没有想过自己可以从中学会如何能够做好真正的授权。谈到授权,我们的真正目...

  • SpringSecurity认证原理

    认证流程原理 认证流程 SpringSecurity是基于Filter实现认证和授权,底层通过FilterChai...

  • 漫谈认证与授权

    漫谈认证与授权 Intro 认证与授权一直以来都是很多人在讨论的话题,之所以想这次谈一谈认证和授权,主要是因为最近...

  • MongoDB认证和授权

    MongoDB认证和授权详解MongoDB安全介绍及配置身份认证MondoDB安全 要想了解MongoDB的权限必...

  • 授权和认证 Endpoint

    layout: docs-default 授权和认证 Endpoint 授权Endpoint可以用来获取访问令牌或...

网友评论

      本文标题:再谈认证和授权

      本文链接:https://www.haomeiwen.com/subject/kaifhktx.html