如何在golang中使用curl发送身份验证令牌?

时间:2016-03-24 11:19:13

标签: curl go

我正在尝试将身份验证模型用于我的golang API,而我正在使用gin框架。我想使用curl发送身份验证令牌,然后验证它并在身份验证发生后执行所有crud操作。

我的代码是这样的:

func TokenAuthMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        token := c.Request.FormValue("token")

        if token == "" {
            respondWithError(401, "API token required", c)
            return
        }

        if token != os.Getenv("API_TOKEN") {
            respondWithError(401, "Invalid API token", c)
            return
        }

        c.Next()
    }
}

func respondWithError(code int, message string,c *gin.Context) {
    resp := map[string]string{"error": message}

    c.JSON(code, resp)
    c.Abort()
}

主要功能:

func main() {
    router := gin.Default()
    router.Use(TokenAuthMiddleware())
    router.Run(":8000")
}

如何使用curl传递身份验证令牌?

1 个答案:

答案 0 :(得分:1)

c.Request.FormValue("token")期望令牌通过application/x-www-form-urlencoded POST请求发送。要使用cURL完成此操作,您可以执行以下操作:

$ curl -i --data "token=<token>" https://example.org/endpoint

此方法的缺点是,对于每个请求,您的POST请求必须包含令牌值 - 但是如果您要使用GETDELETE请求会怎样?

像@elithrar所说,发送带有Authorization标头的身份验证令牌会更有意义。通过cURL在标头中发送身份验证令牌非常简单,请使用-H标志,例如

$ curl -i POST -H "Authorization: Bearer <token>" --data "key1=value1&key2=value2" https://example.org

使用JWT正确签署身份验证令牌的方法。我建议使用dgrijalva/jwt-go来使用JWT。

如果您只需要一个用户访问您的API,那么JWT并不是真正需要的。只需确保您的身份验证令牌是(伪)随机生成的,例如:使用openssl库:

$ openssl rand -out $GOPATH/bin/token.key -base64 128