第21章:实战一 —— 用户认证微服务
本章目标
构建完整的 gRPC 用户认证服务(JWT + 拦截器 + Gateway)
项目结构
auth-service/
├── proto/
│ └── auth.proto
├── server/
│ └── main.go
├── client/
│ └── main.go
├── interceptors/
│ └── auth.go
└── go.modProto 定义
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 | 获取用户信息 |
练习题
- 实现完整的用户认证微服务。
- 添加 JWT 认证拦截器。
- 用 gRPC Gateway 暴露 REST API。