为了账号安全,请及时绑定邮箱和手机立即绑定

后操作失败并出现“CSRF 令牌验证失败”错误

后操作失败并出现“CSRF 令牌验证失败”错误

Go
慕尼黑的夜晚无繁华 2023-04-17 16:45:50
我正在尝试对 SAP Hybris C4C 实体执行 POST 操作。我发现很多博客都提到我们需要在 POST 期间发送 X-CSRF-Token,它可以首先使用 GET 操作检索。我使用 Postman 成功地做到了这一点。因为 Postman 存储 cookie 不会导致 CSRF 令牌验证失败。但是,我实际上想用 golang 来调用它。而且我每次都收到错误,因为“CSRF 令牌验证失败”。然后在浏览了很多博客之后,我发现我们不仅要设置 X-CSRF-Token,还要设置 Cookie,这样 HTTP POST 就不会被视为新会话。否则我们发送的 csrf 令牌与当前会话不匹配导致错误。即使在遵循以上两条线索之后,我仍然遇到错误。下面是代码片段,我不确定还缺少什么。代码片段:auth := "******:*****"basicAuth := base64.StdEncoding.EncodeToString([]byte(auth))geturl := "https://******.crm.ondemand.com/sap/c4c/odata/v1/c4codataapi"req, _ := http.NewRequest("GET", geturl, nil)req.Header.Set("Authorization", "Basic "+basicAuth)req.Header.Set("X-Csrf-Token", "Fetch")cli := &http.Client{}res, _ := cli.Do(req)inputMap := make(map[string]interface{})inputMap["PriorityCodeText"] = "Normal"inputJSON, _ := json.Marshal(inputMap)url := "https://*******.crm.ondemand.com/sap/c4c/odata/v1/c4codataapi/OpportunityCollection"request, _ := http.NewRequest("POST", url, bytes.NewBuffer(inputJSON))request.Header.Set("Authorization", "Basic "+basicAuth)request.Header.Set("X-Csrf-Token", res.Header.Get("X-Csrf-Token"))request.Header.Set("Cookie", res.Header.Get("Set-Cookie"))request.Header.Set("X-Requested-With", "XMLHttpRequest")request.Header.Set("Content-Type", "application/atomsvc+xml")request.Header.Set("DataServiceVersion", "2.0")//request.Header.Set("Accept", "application/atom+xml")client := &http.Client{}resp, _ := client.Do(request)fmt.Printf("Response status code is: %d", resp.StatusCode)jsonResponseData, _ := ioutil.ReadAll(resp.Body)fmt.Printf("Response is: %s", jsonResponseData)
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

有效!我必须复制所有 cookie 而不是仅仅设置标头。我做了以下代码片段的更改


//request.Header.Set("Cookie", res.Header.Get("Set-Cookie"))

for i := 0; i < len(res.Cookies()); i++ {

    request.AddCookie(res.Cookies()[i])

}


查看完整回答
反对 回复 2023-04-17
?
Helenr

TA贡献1780条经验 获得超3个赞

我有时会面对 tomcat 9,就我而言,只需注销并重新登录即可解决问题。
似乎 java 应用程序使用了过期的 cookie,但没有错误地将我重定向到注销页面。

查看完整回答
反对 回复 2023-04-17
  • 2 回答
  • 0 关注
  • 294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信