2016-03-24 54 views
1

我想使用身份驗證模型到我的golang API和我使用杜松子酒框架。我想使用curl發送驗證令牌,然後驗證它並在驗證發生後執行所有crud操作。如何在golang中使用curl發送驗證令牌?

我的代碼是這樣的:

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認證令牌?

+0

如果你把它作爲表單數據,您將需要使用捲曲的'--data'標誌(閱讀使用手冊)。在'Authorization'頭部接受令牌可能更有意義。 – elithrar

回答

1

c.Request.FormValue("token")預計令牌通過application/x-www-form-urlencoded POST請求發送。與捲曲做到這一點,你可以做一些事情如下:

$ 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使用智威湯遜。

如果您只需要一個用戶訪問您的API,那麼JWT並不是真的需要。只要確保您的身份驗證令牌是(僞)隨機生成的,例如與openssl庫:

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

我使用了curl -X --data「token = API_TOKEN」'https:// example.org/endpoint'但是我得到了{「error」:「API令牌無效」} –

+0

我的錯 - 不要使用選項-X。你確定API_TOKEN匹配'os.Getenv'中定義的內容嗎?如果不是,請驗證爲什麼'os.GetEnv'不匹配。否則,請嘗試通過標題發送它,然後像杜松子酒一樣處理它:'var token = c.Request.Header.Get(「Authorization」)' –

+0

thanx,但我得到的結果相同 –

相關問題