首页 > 其他分享 >使用kratos框架集成jwt认证

使用kratos框架集成jwt认证

时间:2024-04-20 21:01:54浏览次数:31  
标签:kratos jwt 认证 token MySigningKey func

问题背景:网络鉴权在web开发中最常见不过了,最近在使用go kratos框架写项目的时候需要用到jwt,查阅资料后自己动手实现了简单的鉴权,在这里记录一下实现步骤,直接上代码。

  1. 定义jwt签发函数
    这部分我是参考了李文周老师的博客
    博客地址:https://www.liwenzhou.com/posts/Go/json-web-token/
// MySigningKey 用于签名的字符串
var MySigningKey = []byte("mysecret")

const TokenExpireDuration = time.Hour * 24

type CustomClaims struct {
	// 可根据需要自行添加字段
	Username             string `json:"username"`
	jwt.RegisteredClaims        // 内嵌标准的声明
}

// GenRegisteredClaims 使用默认声明创建jwt
func GenRegisteredClaims(username string) (string, error) {
	// 创建 Claims
	claims := CustomClaims{
		username,
		jwt.RegisteredClaims{
			ExpiresAt: jwt.NewNumericDate(time.Now().Add(TokenExpireDuration)),
			Issuer:    "my-project",
		},
	}
	// 生成token对象
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	// 生成签名字符串
	return token.SignedString(MySigningKey)
}
  1. 在kratos框架中完成token认证中间件
    这部分是参考了kratos官方文档
    参考地址:https://go-kratos.dev/docs/component/middleware/overview
// server/http.go
options := []jwt.Option{
jwt.WithClaims(func() jwtv4.Claims {
return &utils.CustomClaims{}
}),
}

testKey := utils.MySigningKey
http.Middleware(
recovery.Recovery(),
// 选择器中间件,只对支付接口生效

selector.Server(
// 认证中间件,传入func和options
jwt.Server(
	func(token *jwtv4.Token) (interface{}, error) {
	return []byte(testKey), nil
		}, options...,
)).Path("/helloworld.v1.Greeter/Pay").Build(),
),
// grpc部分与http认证类似,此处不再赘述

通过以上简单步骤就可以在kratos框架中实现简单的jwt认证,web请求访问对应路由时,请求头应携带相应的token,否则会被拦截。

标签:kratos,jwt,认证,token,MySigningKey,func
From: https://www.cnblogs.com/feel-myself/p/18148137

相关文章

  • 基于内存的用户名和密码认证
    代码实现从SpringSecurity官网文档可以看到,我们想要实现一个基于内存的用户名密码认证,需要编写配置,如下:在我们的项目中,建立如下项目结构:我们将SpringSecurity有关配置全部放置于Security包中。/***@author无涯子*@date2024/4/20*/@Configurationpublicclass......
  • APP阿里云一键取号 (一键登陆)php接口-- (阿里云号码认证服务)
    #通过composer安装阿里云SDK"alibabacloud/dypnsapi-20170525":"^1.1.2","alibabacloud/darabonba-openapi":"^0.2.10","alibabacloud/tea-console":"^0.1.0","alibabacloud/tea-utils":"^0......
  • 08-接口文档和JWT
    接口文档楔子接口文档对于协调前后端开发非常重要,可以避免因为开发习惯不同而导致的意外情况。在项目中,如果前后端开发各自为战,可能会出现不一致的情况。因此,接口文档可以约束双方,确保他们按照统一的规范进行开发,从而提高协同开发的效率和一致性。规范接口文档一般包括以下内......
  • 异常处理、接口文档、 jwt介绍、
    【异常处理详见excel的异常处理的源码总结】#APIView--->dispatch--->三大认证,视图类的方法,如果出了异常,#会被异常捕获,捕获后统一处理#关键就是dispatch里面的response=self.handle_exception(exc)这行代码#drf内置了一个函数,只要上面过程出了异常,就会执行这个函......
  • 信创里程碑:Tapdata 同时通过华为云 GaussDB 及鲲鹏兼容互认证,全面支持基础设施自主创
    近日,深圳钛铂数据有限公司(以下简称钛铂数据)自主研发的钛铂实时数据平台(TapdataLiveDataPlatform)分别与华为云GaussDB、华为云公有云平台(鲲鹏)完成相互兼容性测试,经功能、性能、安全三轮测试显示,TapdataLiveDataPlatform与二者兼容性良好,系统功能正常,运行稳定,顺利获得华为云......
  • jwt json web token
    签发----登录成功后签发认证---需要登录才能访问的接口,通过认证才能继续操作2原理-----jwt和session,cookie区别2.1cookies2.2session2.2.1sessionmiddleware2.3jwttooken长什么样?三段式,用.分割每段b64编码 1st段:公司信息,加密方式就是jwt,一般固定 2nd......
  • 生态短讯 | Tapdata 与 TDengine 完成产品兼容性互认证,打造物联网实时数据生态
    近月,深圳钛铂数据有限公司(以下简称钛铂数据)自主研发的实时数据平台(TapdataLiveDataPlatform)与北京涛思数据科技有限公司(以下简称涛思数据)自主研发的大数据平台TDengine,已经完成了产品兼容性互认证。经双方团队共同严格测试,TapdataLiveDataPlatform与TDengine共同稳定......
  • keycloak~jwt的rs256签名的验证方式
    接口地址keycloak开放接口地址:/auth/realms/fabao/.well-known/openid-configurationrsa算法相关术语RSA算法是一种非对称加密算法,其安全性基于大整数分解的困难性。在RSA算法中,有以下几个关键参数:n(模数):n是一个大整数,通常为两个大素数p和q的乘积,即n=p*q。n用......
  • 【python之DRF学习】三大方法之认证
    title:【python之DRF学习】三大方法之认证date:2024-04-1721:00:56星期三updated:2024-04-1721:01:00星期三description:cover:内置三大方法:drf之APIView内部的必须会经过的三大认证/方法:认证、权限、频率一、认证组件1、简介登录认证的限制​认证组件......
  • drf之认证、权限、频率控制、排序、过滤、分页
    【认证】models.py1fromdjango.dbimportmodels234#Createyourmodelshere.5classUser(models.Model):6username=models.CharField(max_length=50)7password=models.CharField(max_length=50)8user_type=models.IntegerFiel......