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
}
时间: 2024-12-25 02:50:29

grpc-golang实现账号and密码认证的相关文章

oracle最高账号sys的密码认证模式

CONNECT USERNAME/[email protected] AS SYSDBAconnect 是指连接到username是指用户名password是指密码servername是指服务名as sysdba是指已数据库管理员的身份登录不知道能不能帮到你. oracle提供的认证模式 1. 操作系统验证(匿名登录 不检验用户名和密码)  conn / as sysdba既是操作系统认证  只能用在本地 因为数据库软件安装在操作系统之上 用户必须是dba组;  能直接访问操作系统了 oracl

给某单位的远程接入动态密码认证 建设方案

目         录 一.       远程接入身份认证应用概述.... 3 2.1         远程接入身份认证应用现状... 3 2.2         双因素认证方案建设意见... 3 2.3         认证双因素基本原理... 5 二.       身份认证解决方案.... 5 3.1         动联身份认证系统介绍... 6 3.1.1          认证服务... 7 3.1.2          管理中心... 9 3.1.3          动码令. 12

MongoDB 设置账号和密码

一.安装MongoDB 1.环境配置: i.操作系统:CentOS release 6.8 (Final) [[email protected] bin]# cat /etc/redhat-release ii.计算机类型:x86_64 [[email protected] bin]# uname -m 2.下载对应的MongoDB 版本 [[email protected] bin]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x8

OpenVPN使用用户名密码认证

紧接上一篇,OpenVPN使用openldap进行认证,这一次让openvpn读取本地文件中的用户名密码,通过判断用户名密码是否存在文件中进行认证,搭建openvpn环境就不多做说明了,只要把openvpn搭建好,客户端能够连接就可以了. 1.修改openvpn配置文件 vi /etc/server.conf 编辑/etc/server.conf文件,并添加如下内容: auth-user-pass-verify /etc/openvpn/checkpsw.sh via-envclient-cer

ahjesus linux连接阿里云ubuntu服务器并更改默认账号和密码,以及创建子账户

先确保本地Linux服务器SSH服务开启,如果没有开启直接执行指令:service sshd start 然后我们使用ssh指令进行远程登陆 ssh [email protected] 输入passwd指令修改旧密码 修改默认账号root vi /etc/passwd 按i键进入编辑状态 修改第1行第1个root为新的用户名 按esc键退出编辑状态,并输入:x保存并退出 vi /etc/shadow 按i键进入编辑状态 修改第1行第1个root为新的用户名 按esc键退出编辑状态,并输入:x!强

Selenium + Chrome Diver使用带用户名密码认证的HTTP代理的方法

默认情况下,Chrome的--proxy-server="http://ip:port"参数不支持设置用户名和密码认证.这样就使得"Selenium + Chrome Driver"无法使用HTTP Basic Authentication的HTTP代理.一种变通的方式就是采用IP地址认证,但在国内网络环境下,大多数用户都采用ADSL形式网络接入,IP是变化的,也无法采用IP地址绑定认证.因此迫切需要找到一种让Chrome自动实现HTTP代理用户名密码认证的方案.

Linux ssh服务开启秘钥和密码认证

问题描述: 实现Linux秘钥和密码同时认证 解决方案: vim /etc/ssh/sshd_config 基本参数: PermitRootLogin yes #允许root认证登录 PasswordAuthentication yes #允许密码认证 RSAAuthentication yes #秘钥认证 PubkeyAuthentication yes 详细参数列表 [[email protected] ~]# cat /etc/ssh/sshd_config # $OpenBSD: ssh

记录一次黑客模拟攻击 成功拿到淘宝账号和密码

前言:昨晚上我看到一篇因为apple ID 被盗,被迫向骗子支付了1000多元的文章,看完后,觉得如今真的不能在网络上留下自己太多的个人信息,尤其是涉及个人隐私.财产的信息,能避免尽量避免,要不然稍不注意就会被黑客利用. 文章中的黑客不仅改了他的密码,而且也把他账号的密保和邮箱篡改了,PO主就没办法了,账号没办法登录,就更别说重置密码了.由于IPhone 和MACBOOK 的丢失模式和保护机制,必须输对密码才能打开手机和电脑, 所以PO主为了拿回账号不得不去被迫花高代价解锁. 想闭,大家的账号都

nginx开启密码认证

nginx可以为网站或者目录设置密码认证,密码认证必须是要加密的.使用apache的htpasswd来创建密码! 使用htpasswd创建密码文件 htpasswd -c   第一次创建时使用-c,如果已存在会清空文件内容                -m  表示以md5格式加密存放 -D   删除用户 1.测试有无htpasswd命令 [[email protected] conf]# htpasswd-bash: htpasswd: command not found          如