由网络副手--寻路人于2022.06.24 19:02:29发布在 go-集成阿里云验证码服务 阅读2525 评论0 喜欢0 ## GO 集成验证码服务 阿里云滑动验证码 https://help.aliyun.com/document_detail/121893.html ## 代码模块 1、YAML 配置信息 ``` #阿里云asf 验证码服务 aliyun_asf: access_key: "****" access_key_secret: "*****" region_id: "cn-hangzhou" endpoint: "afs.aliyuncs.com" ``` 2、 配置文件初始化 && Client 随服务启动初始化 ``` type yamls struct { AliYunAfs AliYunAfs `yaml:"aliyun_asf"` } type AliYunAfs struct { AccessKey string `yaml:"access_key"` AccessKeySecret string `yaml:"access_key_secret"` RegionId string `yaml:"region_id"` Endpoint string `yaml:"endpoint"` } type Config struct { Yaml *yamls AliYunAfsClient *afs.Client } ``` ``` import ( afs "github.com/alibabacloud-go/afs-20180112/client" rpc "github.com/alibabacloud-go/tea-rpc/client" ) func ConfInstance() *Config { confOnce.Do(func() { //初始化阿里云asf 验证码 Conf.initAliYunAfs() }) return Conf } func (c *Config) initAliYunAfs() { config := new(rpc.Config) config.SetAccessKeyId(c.Yaml.AliYunAfs.AccessKey). SetAccessKeySecret(c.Yaml.AliYunAfs.AccessKeySecret). SetRegionId(c.Yaml.AliYunAfs.RegionId). SetEndpoint(c.Yaml.AliYunAfs.Endpoint) c.AliYunAfsClient, _ = afs.NewClient(config) } ``` 3、封装服务 aliyun/afs_service.go ``` package aliyun import ( "errors" afs "github.com/alibabacloud-go/afs-20180112/client" "github.com/sirupsen/logrus" "muse-api/config" "muse-api/middleware/logger" ) const ( successCode = 100 ) type AfsReq struct { Sig string `json:"sig" binding:"required"` SessionId string `json:"session_id" binding:"required"` Token string `json:"token" binding:"required"` Scene string `json:"scene" binding:"required"` AppKey string `json:"app_key" binding:"required"` Ip string `json:"ip"` } func AfsValidate(req *AfsReq) error { request := new(afs.AuthenticateSigRequest) request.SetSig(req.Sig) request.SetSessionId(req.SessionId) request.SetToken(req.Token) request.SetRemoteIp(req.Ip) request.SetScene(req.Scene) request.SetAppKey(req.AppKey) response, err := config.Conf.AliYunAfsClient.AuthenticateSig(request) if err != nil { logger.AppLog.WithFields(logrus.Fields{ "req": req, "err": err.Error(), }).Error("阿里云请求验证接口异常") return errors.New("验证码服务失败") } if *response.Code == successCode { return nil } else { logger.AppLog.WithFields(logrus.Fields{ "req": req, "resp": response, }).Error("验证失败,非法请求") return errors.New("验证失败,非法请求") } } ``` 4、业务使用验证 Gin 框架 ``` func RealNameAuth(c *gin.Context) { var ( req typespec.RealNameAuthRequest resp typespec.RealNameAuthResponse ) var params struct { typespec.RealNameAuthRequest afsReq aliyun.AfsReq } if err := c.ShouldBind(¶ms); err != nil { c.JSON(http.StatusOK, WriteResponse(BadRequest, err, nil)) return } utils.Bind(&req, params) req.UserID = c.GetInt("uid") var afsReq aliyun.AfsReq utils.Bind(&afsReq, params) if err := c.ShouldBind(&afsReq); err != nil { c.JSON(http.StatusOK, WriteResponse(BadRequest, err, nil)) return } afsReq.Ip = c.ClientIP() //验证通过后再执行后端服务 err := aliyun.AfsValidate(&afsReq) if err != nil { c.JSON(http.StatusOK, WriteResponse(BadRequest, err, nil)) return } //.... 业务代码 //.... c.JSON(http.StatusOK, WriteResponse(Success, nil, &resp)) } ``` ## 阿里云SDK资料 Alibaba Cloud afs SDK for Go https://github.com/alibabacloud-go/afs-20180112?spm=a2c4g.11186623.0.0.3e9758ddps1OAQ Alibaba Cloud RPC Client https://github.com/alibabacloud-go/tea-rpc 赞 0 分享 赏 您可以选择一种方式赞助本站 支付宝扫码赞助 BraveDu 署名: 网络副手~寻路人