token

package
v0.0.0-...-f5108b3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 8, 2024 License: MIT Imports: 6 Imported by: 0

README

令牌管理

Restful设计接口

  • http method: POST/GET/PUT/PATCH/..
  • http path: /users/list, /users/get

HTTP API: 通过HTTP协议把请求传递给你服务端, 服务端详情请求

传统的API风格: Http Method: POST Http URL: /object/action, /users/list /users/create /users/login Http Body: 存放参数, url encod 编码

Restful 风格: API: 资源的状态变化: REST即表述性状态传递(英文:Representational State Transfer,简称REST

定义一种操作服务端资源的一种API风格

资产: users, blogs, 动作: 使用http method: POST:创建, GET获取, PUT:全量修改, PATCH:修改部分属性, DELETE: 删除

POST: /users/ : 创建用户 GET: /usres/ : 获取用于列表 GET: /users/01/: 获取id为01的资源详情 PUT: /usrs/01/: 修改id为01的user资源 DELETE /users/01/: 删除id为01的资源

令牌管理的RestulfAPI

  • POST /tokens/: 颁发token, 参数在HTTP Body
  • DELETE /tokens/: 删除token, 参数在Header
  • 统一采用JSON来交互: JSON ON HTTP

接口改进: /xxxx/xxx ---> 静态服务器(html), /api ---> localhost:8070

// 代表这个是个后端接口 /api/service_name/service_versions

  • POST /api/vblog/v1/tokens/: 颁发token, 参数在HTTP Body
  • DELETE /api/vblog/v1/tokens/: 删除token, 参数在Header

通过HTTP协议传递参数的方式:

    1. 通过Header: AccessToken: xxxxxx
    1. URL
    • 路径参数: /users/01 01就是路径参数
    • URL参数: /users/01?key1=value1&key2=values key1=value1&key2=values url参数
    1. Body
    • 通过HTTP Body来传递参数

Documentation

Index

Constants

View Source
const (
	TOKEN_COOKIE_NAME  = "access_token"
	TOKEN_GIN_KEY_NAME = "access_token"
)
View Source
const (
	AppName = "token"
)

Variables

View Source
var AuthFailed = exception.NewAuthFailed("用户名或者密码不正确")
View Source
var (
	CookieNotFound = exception.NewAuthFailed("cookie %s not found", TOKEN_COOKIE_NAME)
)

Functions

This section is empty.

Types

type LoginRequest

type LoginRequest struct {
	Username string
	Password string
}

func NewLoginRequest

func NewLoginRequest() *LoginRequest

type LogoutRequest

type LogoutRequest struct {
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
}

万一的Token泄露, 不知道refresh_token,也没法推出

type Service

type Service interface {
	// 登录接口(颁发Token)
	Login(context.Context, *LoginRequest) (*Token, error)
	// 退出接口(销毁Token)
	Logout(context.Context, *LogoutRequest) error

	// 校验Token 是给内部中间层使用 身份校验层
	// 校验完后返回Token, 通过Token获取 用户信息
	ValiateToken(context.Context, *ValiateToken) (*Token, error)
}

type Token

type Token struct {
	// 该Token是颁发
	UserId int64 `json:"user_id"`
	// 人的名称, user_name
	UserName string `json:"username" gorm:"column:username"`
	// 办法给用户的访问令牌(用户需要携带Token来访问接口)
	AccessToken string `json:"access_token"`
	// 过期时间(2h), 单位是秒
	AccessTokenExpiredAt int `json:"access_token_expired_at"`
	// 刷新Token
	RefreshToken string `json:"refresh_token"`
	// 刷新Token过期时间(7d)
	RefreshTokenExpiredAt int `json:"refresh_token_expired_at"`

	// 创建时间
	CreatedAt int64 `json:"created_at"`
	// 更新实现
	UpdatedAt int64 `json:"updated_at"`

	// 额外补充信息, gorm忽略处理
	Role user.Role `gorm:"-"`
}

func NewToken

func NewToken() *Token

func (*Token) ExpiredTime

func (t *Token) ExpiredTime() time.Time

计算Token的过期时间

func (*Token) IsExpired

func (t *Token) IsExpired() error

func (*Token) String

func (u *Token) String() string

func (*Token) TableName

func (t *Token) TableName() string

type ValiateToken

type ValiateToken struct {
	AccessToken string `json:"access_token"`
}

func NewValiateToken

func NewValiateToken(at string) *ValiateToken

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL