Go Auth0-验证代码验证程序错误失败

Go Auth0-验证代码验证程序错误失败,go,oauth-2.0,auth0,pkce,Go,Oauth 2.0,Auth0,Pkce,我正在编写一个脚本,它使用auth0通过远程API进行身份验证 遵循本教程: 我使用该函数生成代码质询,例如eQM2dqasJN3-gXcM0g1Se-CmAn8PyU7c5uHRKU7Exa0 我使用有效负载生成一个HTTP Post p := &payloadData{ GrantType: "authorization_code", ClientId: "...............................", (remov

我正在编写一个脚本,它使用auth0通过远程API进行身份验证

遵循本教程:

我使用该函数生成代码质询,例如
eQM2dqasJN3-gXcM0g1Se-CmAn8PyU7c5uHRKU7Exa0

我使用有效负载生成一个HTTP Post

p := &payloadData{
        GrantType:    "authorization_code",
        ClientId:     "...............................", (removed)
        CodeVerifier: codeChallenge, 
        Code:         code, (example: AuL3ArApgQ4QDu_9)
        RedirectUri:  "http://127.0.0.1:16272/oauth/token",
}

...marshal json...

req, _ := http.NewRequest("POST", "https://my-app.eu.auth0.com/oauth/token", bytes.NewBuffer(payload))
我得到一个错误:

{403禁止403

{“error”:“invalid_grant”,“error_description”:“未能验证代码验证程序”}

其他对此的引用指出,在base64编码质询中,字符没有正确地进行url编码/替换

我已经尝试了以下两种编码/

code = strings.Replace(code, "+", "-", -1)
code = strings.Replace(code, "/", "_", -1)
code = strings.Replace(code, "=", "", -1)

但我总是得到:


{“error”:“invalid_grant”,“error_description”:“未能验证代码验证程序”}

我在实现Auth0 PKCE时遇到了相同的错误:

{"error":"invalid_grant","error_description":"Failed to verify code verifier"}
在我的例子中,错误是由于在授权URL和令牌交换中意外发送了不同的验证器造成的。我对调用的授权URL和令牌交换请求正文进行了一些日志记录,以了解这一点,并建议您也这样做

我这里有一个正在运行的演示实现,您可以尝试。这是一个HTTP服务器,不是本机应用程序,但它成功地运行了PKCE流

需要注意的是,您不必手动替换
+
/
,因为Go支持使用
base64.URLEncoding
而不是
StdEncoding
,如下所示:

strings.Trim(base64.URLEncoding.EncodeToString(data), "=")
除Auth0文档外,IETF RFC-7636中还提供了有关OAuth 2.0 PKCE的更多信息:


我检查了代码,挑战是相同的。也将base64编码更改为challange:=base64.RawURLEncoding.EncodeToString(ch[:])谢谢!
{"error":"invalid_grant","error_description":"Failed to verify code verifier"}
strings.Trim(base64.URLEncoding.EncodeToString(data), "=")