Skip to content

第21章:实战一 —— 用户认证微服务 ​

本章目标 ​

构建完整的 gRPC 用户认证服务(JWT + 拦截器 + Gateway)

项目结构 ​

auth-service/
├── proto/
│   └── auth.proto
├── server/
│   └── main.go
├── client/
│   └── main.go
├── interceptors/
│   └── auth.go
└── go.mod

Proto 定义 ​

protobuf
service AuthService {
  rpc Register(RegisterRequest) returns (RegisterResponse);
  rpc Login(LoginRequest) returns (LoginResponse);
  rpc ValidateToken(ValidateTokenRequest) returns (ValidateTokenResponse);
  rpc GetProfile(GetProfileRequest) returns (User);
}

核心代码 ​

go
func (s *authServer) Login(ctx context.Context, req *pb.LoginRequest) (*pb.LoginResponse, error) {
	// 验证用户名密码 → 生成 JWT
	token, _ := generateJWT(user.ID, user.Username)
	return &pb.LoginResponse{Token: token, ExpiresIn: 86400}, nil
}

func (s *authServer) ValidateToken(ctx context.Context, req *pb.ValidateTokenRequest) (*pb.ValidateTokenResponse, error) {
	claims, err := parseJWT(req.GetToken())
	if err != nil {
		return nil, status.Error(codes.Unauthenticated, "Token无效")
	}
	return &pb.ValidateTokenResponse{UserId: claims.UserID, Valid: true}, nil
}

API ​

RPC说明
Register注册
Login登录
ValidateToken验证 Token
GetProfile获取用户信息

练习题 ​

  1. 实现完整的用户认证微服务。
  2. 添加 JWT 认证拦截器。
  3. 用 gRPC Gateway 暴露 REST API。

把零散知识,整理成可以反复走的路。