ERR_ABORTED 403(禁止)
ERR_ABORTED 403 (Forbidden)
我正在尝试构建一个可以控制我的 Sonos 扬声器的程序。我正在按照 https://developer.sonos.com/build/direct-control/authorize/.
上的说明进行操作
第一步 - 获取授权码 - 正在按预期工作,但是当我尝试使用以下代码按 POST 请求发送授权码时,我遇到了问题:
const redirect_uri = "https%3A%2F%2Fsonoscontrol-c4af4.web.app%2F";
const redirect_url = "https://sonoscontrol-c4af4.web.app/";
const client_id = // API Key (deleted value for safety)
const secret = // Secret (deleted value for safety)
const auth_url = `https://api.sonos.com/login/v3/oauth?client_id=${client_id}&response_type=code&state=testState&scope=playback-control-all&redirect_uri=${redirect_uri}`;
function GetAccessToken() {
var target_url = "https://api.sonos.com/login/v3/oauth/access/";
var authCode = GetAuthCode();
var encoded_msg = btoa(client_id + ":" + secret); // base64-encodes client_id and secret using semicolon as delimiter
var params = "grant_type=authorization_code" + `&code=${authCode}` + `&redirect_uri=${redirect_uri}` + `&client_id=${client_id}`;
var myHeaders = new Headers({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST',
'Authentication': `Basic {${encoded_msg}}`,
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
});
fetch(target_url, {
method: "POST",
mode: "no-cors",
credentials: "include",
redirect: "follow",
headers: myHeaders,
body: params
}).then((res) => {
console.log(res.responseText);
}).catch(function(error) {
console.log(error);
});
}
function GetAuthCode() {
return (new URLSearchParams(location.search)).get('code'); // returns authorization code from URL
}
现在我在尝试发送 POST 请求时收到以下错误:POST https://api.sonos.com/login/v3/oauth/access/ net::ERR_ABORTED 403 (Forbidden)
我正在使用 Cloud Firebase 应用作为网络服务器,并在凭据中添加了正确的重定向 URL。
此错误消息可能是什么问题?
我注意到您的代码中有几处可能导致您的 403 Forbidden 问题。
- 您的“身份验证”header 应该是“授权”,例如:“授权:基本 {YourBase64EncodedClientId:SecretGoesHere}”
- 您的“target_url”结尾有一个斜线,应该是“https://api.sonos.com/login/v3/oauth/access”
- 您的查询参数“params”包括令牌请求中的 client_id,这不是必需的,但我认为它不会导致错误。
解决上述问题有望解决您的问题!
谢谢,
-马克
我正在尝试构建一个可以控制我的 Sonos 扬声器的程序。我正在按照 https://developer.sonos.com/build/direct-control/authorize/.
上的说明进行操作第一步 - 获取授权码 - 正在按预期工作,但是当我尝试使用以下代码按 POST 请求发送授权码时,我遇到了问题:
const redirect_uri = "https%3A%2F%2Fsonoscontrol-c4af4.web.app%2F";
const redirect_url = "https://sonoscontrol-c4af4.web.app/";
const client_id = // API Key (deleted value for safety)
const secret = // Secret (deleted value for safety)
const auth_url = `https://api.sonos.com/login/v3/oauth?client_id=${client_id}&response_type=code&state=testState&scope=playback-control-all&redirect_uri=${redirect_uri}`;
function GetAccessToken() {
var target_url = "https://api.sonos.com/login/v3/oauth/access/";
var authCode = GetAuthCode();
var encoded_msg = btoa(client_id + ":" + secret); // base64-encodes client_id and secret using semicolon as delimiter
var params = "grant_type=authorization_code" + `&code=${authCode}` + `&redirect_uri=${redirect_uri}` + `&client_id=${client_id}`;
var myHeaders = new Headers({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST',
'Authentication': `Basic {${encoded_msg}}`,
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
});
fetch(target_url, {
method: "POST",
mode: "no-cors",
credentials: "include",
redirect: "follow",
headers: myHeaders,
body: params
}).then((res) => {
console.log(res.responseText);
}).catch(function(error) {
console.log(error);
});
}
function GetAuthCode() {
return (new URLSearchParams(location.search)).get('code'); // returns authorization code from URL
}
现在我在尝试发送 POST 请求时收到以下错误:POST https://api.sonos.com/login/v3/oauth/access/ net::ERR_ABORTED 403 (Forbidden)
我正在使用 Cloud Firebase 应用作为网络服务器,并在凭据中添加了正确的重定向 URL。
此错误消息可能是什么问题?
我注意到您的代码中有几处可能导致您的 403 Forbidden 问题。
- 您的“身份验证”header 应该是“授权”,例如:“授权:基本 {YourBase64EncodedClientId:SecretGoesHere}”
- 您的“target_url”结尾有一个斜线,应该是“https://api.sonos.com/login/v3/oauth/access”
- 您的查询参数“params”包括令牌请求中的 client_id,这不是必需的,但我认为它不会导致错误。
解决上述问题有望解决您的问题!
谢谢,
-马克