jwt是什么,可以百度下其它文章,我原来看到一个讲的详细的,现在找不到了。先简单介绍下我个人的理解,就是一个token,只不过通过加密解密的手段,能让这一串字符带有一些简单的信息。这样解密jwt后不用查数据库,最常用的例子,保存用户权限,再多层的权限,其实只用一个数字,转换成二进制,每一位代表一种权限。类似这样的使用,还有保存session的key,通过该值查session就能获取更丰富的资料,用来保存用户状态也是可以的。

下面介绍下我的一个golang项目中使用beego框架做纯API接口使用jwt的方法。

首先用到jwt函数的go文件都要引入这个库

import (
  "github.com/dgrijalva/jwt-go"
)

 
登录函数中登录成功把jwt字符串发给客户端,客户端需要保存起来比如localStorage中,访问别的API时加到header里面, 注意这个里面exp是必须要的,生命周期。其他都是根据自己需求添加的键值对。。
if passwd == user.Password {

            // 带权限创建令牌
claims := make(jwt.MapClaims)
claims["username"] = username
if username == "admin" {
claims["admin"] = "true"
} else {
claims["admin"] = "false"
}
claims["exp"] = time.Now().Add(time.Hour * ).Unix() //20天有效期,过期需要重新登录获取token
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) // 使用自定义字符串加密 and get the complete encoded token as a string
tokenString, err := token.SignedString([]byte("mykey"))
if err != nil {
beego.Error("jwt.SignedString:", err)
this.RetError(errSystem)
return
}
this.Data["json"] = map[string]interface{}{"status": , "message": "login success ", "moreinfo": tokenString}
} else {
this.Data["json"] = map[string]interface{}{"status": , "message": "login failed ", "moreinfo": time.Now().Format("2006-01-02 15:04:05")}
}

baseControler写这个函数,别的函数全部调用这个做权限认证
// ParseToken parse JWT token in http header.
func (c *BaseController) ParseToken() (t *jwt.Token, e *ControllerError) {
authString := c.Ctx.Input.Header("Authorization")
beego.Debug("AuthString:", authString) kv := strings.Split(authString, " ")
if len(kv) != || kv[] != "Bearer" {
beego.Error("AuthString invalid:", authString)
return nil, errInputData
}
tokenString := kv[] // Parse token
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return []byte("mykey"), nil
})
if err != nil {
beego.Error("Parse token:", err)
if ve, ok := err.(*jwt.ValidationError); ok {
if ve.Errors&jwt.ValidationErrorMalformed != {
// That's not even a token
return nil, errInputData
} else if ve.Errors&(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != {
// Token is either expired or not active yet
return nil, errExpired
} else {
// Couldn't handle this token
return nil, errInputData
}
} else {
// Couldn't handle this token
return nil, errInputData
}
}
if !token.Valid {
beego.Error("Token invalid:", tokenString)
return nil, errInputData
}
beego.Debug("Token:", token) return token, nil
}
其他API代码片段
token, e := this.ParseToken()
if e != nil {
this.RetError(e)
return
}
claims, ok := token.Claims.(jwt.MapClaims)
if !ok {
this.RetError(errPermission)
return
}
var user string = claims["username"].(string)

beego应用做纯API后端如何使用jwt实现无状态权限验证的更多相关文章

  1. Spring Boot Security 整合 JWT 实现 无状态的分布式API接口

    简介 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.JSON Web Token 入门教程 - 阮一峰,这篇文章可以帮你了解JWT的概念.本文重点讲解Spring Boo ...

  2. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  3. 基于swoole框架hyperf开发的纯API接口化的后台RBAC管理工具hyperfly@v1.0.0发布

    hyperfly@v1.0.0发布 本文地址http://yangjianyong.cn/?p=323转载无需经过作者本人授权 github地址:https://github.com/vankour/ ...

  4. 【SpringSecurity系列2】基于SpringSecurity实现前后端分离无状态Rest API的权限控制原理分析

    源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...

  5. 【SpringSecurity系列1】基于SpringSecurity实现前后端分离无状态Rest API的权限控制

    源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...

  6. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object 版权声明:本文为博主原创文章,未经博主允许不得转载. ht ...

  7. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  8. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(一)-环境介绍

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(一)-环境介绍 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  9. 收集免费的接口服务,做一个api的搬运工

    hello, 大家好,今天给大家推荐的开源项目在某种程度上极大的方便了广大的开发者,这个开源项目统计了网上诸多的免费API,为广大开发者收集免费的接口服务,专心致志做一个API的搬运工,每月定时更新新 ...

随机推荐

  1. It's a Mod, Mod, Mod, Mod World (类欧几里得模板题

    https://vjudge.net/contest/317000#problem/F #include <iostream> #include <cstdio> #inclu ...

  2. CentOS6.3搭建ZooKeeper伪集群

    1. 将zookeeper安装包移动至/home, 解压后改名为zookeeper 相关命令 # 解压 .tar.gz # 重命名 zookeeper 2. 进入zookeeper/conf/目录下, ...

  3. Ubuntu+Ruby+MySQL+Nginx+Redmine部署记录

    (2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2016年7月26日) 周五的时候老大布置了一个任务下来,要部署一个Redmine用于研发部,同时升级工作室的Redmine ...

  4. 《DSP using MATLAB》Problem 8.10

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  5. HDU--2126 Buy the souvenirs(二维01背包)

    题目http://acm.hdu.edu.cn/showproblem.php?pid=2126 分析:有两个要求,一是计算最多可以选多少中纪念品:而是计算选最多纪念品的方案有多少种, 即统计最优方案 ...

  6. 全面解析Spring中@ModelAttribute注解的用法

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:全面解析Spring中@ModelAttribute注解的用法: @ModelAttribute注解用于将方法的参数或方法的返回值绑定到 ...

  7. Coursera ML笔记 - 神经网络(Representation)

    前言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自Standford Andrew N ...

  8. tornado nginx 同源(Access-Control-Allow-Origin)错误处理记录

    如果以下两个步骤操作完还是没有解决问题,可能是因为程序出了别的错误,因为后来的调试中不论出什么问题它都是会返回同源错误..呵呵哒 1.在nginx.conf里配置server,在location里添加 ...

  9. git commit规范工具

    npm install -g commitizen commitizen init cz-conventional-changelog --save --save-exact 以后,凡是用到git c ...

  10. 表碎片处理方法OPTIMIZE

    来看看手册中关于 OPTIMIZE 的描述: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 如果您已经删除 ...