- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
将授权代码流与 Spotify-API 的 PKCE 一起使用,我收到错误,我的 code_verifier 不正确,据我目前所知,这必须是编码问题。{"error":"invalid_grant","error_description":"code_verifier was incorrect"}
这是我写的原始代码:
String getAuthUrl() {
code = getRandomString(128);
// saveToPrefs("verfifier_code", code);
var hash = sha256.convert(ascii.encode(code));
String code_challenge = base64Url.encode(hash.bytes);
return Uri.parse(
"https://accounts.spotify.com/authorize?response_type=code&client_id=${widget.client_id}&redirect_uri=http%3A%2F%2Flocalhost%2Fauth&scope=user-top-read&code_challenge=$code_challenge&code_challenge_method=S256")
.toString();
}
这就是我对 Spotify-Authorisation-Guide (
https://developer.spotify.com/documentation/general/guides/authorization-guide/ ) 的理解。
String getAuthUrl() {
// also tried static verifier_codes for debugging, so the getRandomString() function is working properly
code = getRandomString(128);
// saveToPrefs("verfifier_code", code);
var hash = sha256.convert(ascii.encode(code));
// this does not work with either base64 or base64Url
String code_challenge = base64.encode(hash.bytes).replaceAll(RegExp(r"/\+/g"), '-').replaceAll(RegExp(r"/\//g"), '_').replaceAll(RegExp(r"/=+$/"), '');
return Uri.parse(
"https://accounts.spotify.com/authorize?response_type=code&client_id=${widget.client_id}&redirect_uri=http%3A%2F%2Flocalhost%2Fauth&scope=user-top-read&code_challenge=$code_challenge&code_challenge_method=S256")
.toString();
}
我还尝试了不同的编码方式:
var res = await http.post(endpoint, body: {"client_id":widget.client_id, "grant_type":"authorization_code", "code":value, "redirect_uri":"http://localhost/auth", "code_verifier":code});
最佳答案
经过更多研究,我发现正在发生的重要事情是必须删除挑战末尾的“=”(base64Url 不应该这样做吗?)。无论如何,这是工作代码:
编辑代码:
String getAuthUrl() {
code = getRandomString(128);
var hash = sha256.convert(ascii.encode(code));
String code_challenge = base64Url.encode(hash.bytes).replaceAll("=", "").replaceAll("+", "-").replaceAll("/", "_");
return Uri.parse(
"https://accounts.spotify.com/authorize?response_type=code&client_id=${widget.client_id}&redirect_uri=http%3A%2F%2Flocalhost%2Fauth&scope=user-top-read&code_challenge=$code_challenge&code_challenge_method=S256")
.toString();
}
编辑:
关于flutter - Dart/Flutter 中的 Spotify PKCE : "code_verifier was incorrect",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63863467/
我很高兴听到我现在可以使用 Spotify Web API,而无需通过 PKCE 使用后端应用程序。不幸的是,我似乎有某种误解,无法让它发挥作用。 在此过程中,我可能会犯一些小错误,但我做了一次但无济
将授权代码流与 Spotify-API 的 PKCE 一起使用,我收到错误,我的 code_verifier 不正确,据我目前所知,这必须是编码问题。{"error":"invalid_grant",
通常,MSAL 2.0 会自行自动生成代码和 code_verifier。但是在这里,当一半部分在另一个代码上完成时,我有我的自定义流程,即生成 code_challenge。但是当我从前端调用时,我
我目前正在 SSR 页面中使用 PKCE 进行 oauth 2.0 代码授权授权(在前面使用 React,在后面使用 Express)。 我应该在哪里存放 code_verifier当客户端请求授权服
我是一名优秀的程序员,十分优秀!