跳转到内容

REST API + JWT 鉴权

本示例演示如何使用 go-zero 构建带 JWT 认证的安全 REST API。

type LoginReq {
Username string `json:"username"`
Password string `json:"password"`
}
type LoginResp {
Token string `json:"token"`
}
type UserInfoReq {}
type UserInfoResp {
Id int64 `json:"id"`
Name string `json:"name"`
}
service user-api {
@handler Login
post /user/login (LoginReq) returns (LoginResp)
@jwt Auth
@handler UserInfo
get /user/info (UserInfoReq) returns (UserInfoResp)
}
Terminal window
goctl api go -api user.api -dir .
internal/logic/loginlogic.go
func (l *LoginLogic) Login(req *types.LoginReq) (resp *types.LoginResp, err error) {
// 1. 验证用户名密码
// 2. 生成 JWT Token
token, err := generateToken(l.svcCtx.Config.Auth.Secret, req.Username)
if err != nil {
return nil, err
}
return &types.LoginResp{Token: token}, nil
}
etc/user-api.yaml
Name: user-api
Host: 0.0.0.0
Port: 8888
Auth:
AccessSecret: your-secret-key
AccessExpire: 86400