如何使用后端golang获得对Squareup的身份验证?

时间:2018-12-11 06:56:29

标签: security go oauth-2.0

在sqaureup应用程序Aplication_name的oauth选项中,有一个重定向URL,它将使用QueryString代码重定向给定的URL。当我在浏览器中点击https://connect.squareup.com/oauth2/authorize?client_id=YOUR_CLIENT_ID时,它会将我重定向到带有附加代码的oauth中的给定URL。然后,要获取access_token,您必须向正文发出给定网址POST的{​​{1}}请求

https://connect.squareup.com/oauth2/token

我也这样做,并通过方法{ "client_id": "YOUR_APPLICATION_ID", "client_secret": "YOUR_APPLICATION_SECRET", "code": "M-Q7k-N0Emx_3cBqwbVLTQ", "redirect_uri": "YOUR_REDIRECT_URI" } 通过json数据发送到此url,但这会给我错误:-

POST

我为此使用的Golang代码是:-

{
 "message": "Not Authorized",
 "type": "service.not_authorized"
}

模型结构:-

func Token(c *gin.Context) {
 code := c.Query("code") // code be something like:-sq0cgp-wLVQt5HOLfug6xiVdmCDCf
 splitCode := strings.Split(code, "-")
 token := models.PostToken{
    ClientID:     "YOUR_APPLICATION_ID",
    ClientSecret: "YOUR_APPLICATION_SECRET",
    Code:         splitCode[1],
    RedirectUri:  c.Request.Host + c.Request.URL.RequestURI(),
 }
 bindData, err := json.Marshal(token)
 if err != nil {
    panic(err)
 }
   var jsonStr = []byte(string(bindData))
   url := "https://connect.squareup.com/oauth2/token"
   req, err := http.Post(url, "application/json", bytes.NewBuffer(jsonStr))
   fmt.Println(req, err)
}

1 个答案:

答案 0 :(得分:0)

您必须做一些我提到的事情:-

  • 首先检查您的应用程序ID。
  • 在第二个参数ClientSecret中,您必须使用将从应用程序仪表板-> Oauth选项获得的Oauth应用程序密钥。
  • Code中,您无需发送拆分代码,而只需在变量名code中获取简单字符串代码值即可。
  • 第四个参数是可选的,因为文档中说here

然后您将得到想要的东西:D。