odin-doc

Odin Develop Document

View project on GitHub

鉴权


服务端

  • 初始化鉴权(main.go)
      s.AddBeforeServerStartFunc(bs.InitLoggerWithConf(),
          bs.InitTraceLogger("HS-Golang", "0.1"),
          bs.InitPerfutil(),
          bs.InitPprof(),
          s.InitConfig(),
          s.InitRegistry(),
          s.InitRpcxPlugin(rpcxplugin.RatelimitOption(), rpcxplugin.MetricsOption(), rpcxplugin.TraceOption(), rpcxplugin.ContextOption(), rpcxplugin.RecoveryOption(), rpcxplugin.CostWarnOption()),
          s.DisableHTTPGateway(),
          //新增下一行,初始化服务鉴权功能
          s.InitRpcxAuth(),
          s.RegisterServiceWithPlugin("Xes-Micro", app.NewService(), ""))
      s.AddAfterServerStopFunc(bs.CloseLogger())
      err = s.Serve()
      if err != nil {
          panic(err)
      }
    
  • 配置文件
    [ValidRpcxAuth]
    2010101=fe02fnelfn92rnknl
    1203434=jeofnen823rubkj2j
    

    格式为:appId=appKey

  • 自定义appId管理

若不希望通过配置管理,而通过其他存储管理appId和appKey方式,可通过以下方式处理

    s.AddBeforeServerStartFunc(bs.InitLoggerWithConf(),
        bs.InitTraceLogger("HS-Golang", "0.1"),
        bs.InitPerfutil(),
        bs.InitPprof(),
        s.InitConfig(),
        s.InitRegistry(),
        s.InitRpcxPlugin(rpcxplugin.RatelimitOption(), rpcxplugin.MetricsOption(), rpcxplugin.TraceOption(), rpcxplugin.ContextOption(), rpcxplugin.RecoveryOption(), rpcxplugin.CostWarnOption()),
        s.DisableHTTPGateway(),
        //新增下一行,初始化服务鉴权功能
        s.InitRpcxAuth(authAccess),
        s.RegisterServiceWithPlugin("Xes-Micro", app.NewService(), ""))
    s.AddAfterServerStopFunc(bs.CloseLogger())
    err = s.Serve()
    if err != nil {
        panic(err)
    }

func authAccess(in string) (string, bool) {
    //自定义逻辑 一定要使用内存缓存
    return "", false                         
}

实现func(string) (string, bool)类型方法,方法传入s.InitRpcxAuth()中,入参为appId。返回结果为appKey和ok

客户端

  • 配置文件
    [RpcxAuth]
    appId=2010101
    appKey=fe02fnelfn92rnknl 
    

    appId、appKey对应服务端有效id和key

  • 通过ctx传入appId、appKey

如客户端不使用配置管理appId和appKey,或使用多个appId和appKey,可以自行管理,但需通过context进行传递

    ctx = context.WithValue(ctx, "RPCX_APPID", "2010101")
    ctx = context.WithValue(ctx, "RPCX_APPKEY", "fe02fnelfn92rnknl")
    err := client.SayHello(ctx, req, resp)