• grpc-golang实现账号and密码认证


    // I would recommend to use interceptors:
    
    // client
    grpc.Dial(target, grpc.WithPerRPCCredentials(&loginCreds{
        Username: "admin",
        Password: "admin123",
    }))
    
    type loginCreds struct {
        Username, Password string
    }
    
    func (c *loginCreds) GetRequestMetadata(context.Context, ...string) (map[string]string, error) {
        return map[string]string{
            "username": c.Username,
            "password": c.Password,
        }, nil
    }
    
    func (c *loginCreds) RequireTransportSecurity() bool {
        return true
    }
    
    // server
    grpc.NewServer(
        grpc.StreamInterceptor(streamInterceptor), 
        grpc.UnaryInterceptor(unaryInterceptor)
    )
    
    func streamInterceptor(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
        if err := authorize(stream.Context()); err != nil {
            return err
        }
    
        return handler(srv, stream)
    }
    
    func unaryInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
        if err := authorize(ctx); err != nil {
            return err
        }
    
        return handler(ctx, req)
    }
    
    func authorize(ctx context.Context) error {
        if md, ok := metadata.FromContext(ctx); ok {
            if len(md["username"]) > 0 && md["username"][0] == "admin" &&
                len(md["password"]) > 0 && md["password"][0] == "admin123" {
                return nil
            }
    
            return AccessDeniedErr
        }
    
        return EmptyMetadataErr
    }
  • 相关阅读:
    P6007 [USACO20JAN]Springboards G
    CF1000F One Occurrence
    P6100 [USACO19FEB]Painting the Barn G
    P5838 [USACO19DEC]Milk Visits G
    P4085 [USACO17DEC]Haybale Feast
    P4267 [USACO18FEB]Taming the Herd
    P1712 [NOI2016]区间
    CF786B Legacy
    P5665 划分
    NOI2020网上同步赛 游记
  • 原文地址:https://www.cnblogs.com/xiaouisme/p/7149374.html
Copyright © 2020-2023  润新知