我正在使用golang在squareup.com中添加客户,但它总是显示授权的问题有人可以告诉我我的代码有什么问题吗?

func Token(c *gin.Context) {
 code := c.Query("code")
 splitCode := strings.Split(code, "-")
 scope := c.DefaultQuery("scope", "CUSTOMERS_WRITE")
 customer := models.Customer{
    GivenName:    "Amelia",
    FamilyName:   "Earhart",
    CompanyName:  "fbgusbd",
    Nickname:     "kdfbkgjkdf",
    EmailAddress: "[email protected]",
    Address: models.Addresss{
        AddressLine1:                 "500 Electric Ave",
        AddressLine2:                 "Suite 600",
        Locality:                     "New York",
        AdministrativeDistrictLevel1: "NY",
        PostalCode:                   "10003",
        Country:                      "US",
    },
    PhoneNumber: "1-212-555-4240",
    ReferenceId: "12",
    Note:        "a customer",
 }
 fmt.Println(customer)
 bindData, err := json.Marshal(customer)
 if err != nil {
    panic(err)
 }
 var jsonStr = []byte(string(bindData))
 url := config.APIBaseLive + "v2/customers?code=" + splitCode[1] + "&scope=" + scope

 req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
 req.Header.Add("Authorization", "Bearer "+splitCode[1])
 req.Header.Add("Accept", "application/json")
 fmt.Println("Request", req)
  client := &http.Client{}
  resp, err := client.Do(req)
 // fmt.Println(resp, err)
 if err != nil {
    panic(err)
 }
 defer resp.Body.Close()
 resp.Header.Add("Authorization", "Bearer "+splitCode[1])
 resp.Header.Add("Accept", "application/json")
 fmt.Println("response Status:", resp.Status)
 fmt.Println("response Headers:", resp.Header)
 body, _ := ioutil.ReadAll(resp.Body)
 fmt.Println("response Body:", string(body))
}

type Customer struct {
  GivenName    string   `json:"given_name" bson:"given_name"`
  FamilyName   string   `json:"family_name" bson:"family_name"`
  CompanyName  string   `json:"company_name" bson:"company_name"`
  Nickname     string   `json:"nickname" bson:"nickname"`
  EmailAddress string   `json:"email_address" bson:"email_address"`
  Address      Addresss `json:"address" bson:"address"`
  PhoneNumber  string   `json:"phone_number" bson:"phone_number"`
  ReferenceId  string   `json:"reference_id" bson:"reference_id"`
  Note         string   `json:"note" bson:"note"`
}

错误:-
 {
  "errors": [
     {
        "category": "AUTHENTICATION_ERROR",
        "code": "UNAUTHORIZED",
        "detail": "This request could not be authorized."
     }
   ]
}

当点击https://connect.squareup.com/oauth2/authorize?client_id=your_client_id时,它将把您定向到您添加的URL重定向URL,其中包含具有 key 身份验证 key 的查询字符串代码。您将在仪表板中添加重定向URL,然后使用此代码将您称为身份验证用户。谁能帮我解决这个问题?

谢谢。

最佳答案

检查squareup https://docs.connect.squareup.com/authz/oauth/how-it-works如何实现oauth2

您的GO代码在该图上为BACKEND。

预期将从CLIENT(浏览器, native 或移动应用程序)调用https://connect.squareup.com/oauth2/authorize,这将导致浏览器中的一些HTTP重定向,要求用户提供凭据和其他挑战。预期这些凭据将由人类使用浏览器或Web View(浏览器的无边框版本)提供。

从GO发送请求时,您可能会获得重定向响应。即重定向到HTML页面,用户可以在其中输入凭据。

不要尝试在GO中实现CLIENT,这是不可能的,因为整个oauth2流假定用户输入,并且应该检测并拒绝后端代码。

10-04 16:23