sonos - ERR_ABORTED 403(禁止)
问题描述
我正在尝试构建一个可以控制我的 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 问题。
- 您的“身份验证”标头应为“授权”,例如:“授权:基本 {YourBase64EncodedClientId:SecretGoesHere}”
- 您的“target_url”有一个斜杠,它应该是“https://api.sonos.com/login/v3/oauth/access”
- 您的查询参数“参数”包括令牌请求中的 client_id,这不是必需的,但我不相信它会导致错误。
解决上述问题有望解决您的问题!
谢谢,
-标记
推荐阅读
- javascript - 检查 webElement 是否不包含文本,在 Cypress 中不区分大小写
- python - Bokeh - 为 Networkx Graph 添加边缘标签/边缘属性
- haskell - 如何使用光泽加速渲染 mandelbrot
- firebase - 如何使用 Firestore 在 Flutter 中搜索文本
- c# - 在我的字符串列表中使用 Contains() 和 Add() 方法,但它没有运行
- laravel - 当我注销并想再次登录时,Laravel SPA 返回 419
- javascript - 如何在 Flutter Web 上调用 JavaScript 事件方法
- docusignapi - 最小设计示例
- aiohttp - aiohttp CVE-2018-1000519 漏洞
- ios - MFMessageComposeViewController - 禁用收件人的添加/编辑?