POST 请求基本授权 - 不适用于 Node.js 中的 Battle.net API
POST Request Basic Authorization - Not Working for Battle.net API in Node.js
我已经格式化了一个 axios post 请求如下:
var config = {
method: 'post',
url: 'https://us.battle.net/oauth/token',
headers: {
'Authorization': 'Basic '+process.env.BATTLENET_CLIENT+':'+process.env.BATTLENET_SECRET,
...data.getHeaders()
},
data : data
};
这被 401 拒绝了。但是,当我从 Postman 中为此生成代码片段时,其功能是相同的,除了授权是生成的看似随机的字符串:
var config = {
method: 'post',
url: 'https://us.battle.net/oauth/token',
headers: {
'Authorization': 'Basic reallyRandomLongStringIsNotClientIDAndSecretKey=',
...data.getHeaders()
},
data : data
};
将其插入我的代码使其工作。我很好奇在编写 Basic Auth 凭据时是否遗漏了什么,因为 Postman 似乎 converted/encrypted 把它变成了我无法弄清楚的东西?
您只需要将包含用户名和 password/secret 的字符串编码为 Base64,如下所示:
const encodedAuthorization = Buffer.from(`${process.env.BATTLENET_CLIENT}:${process.env.BATTLENET_SECRET}`).toString('base64')
var config = {
method: 'post',
url: 'https://us.battle.net/oauth/token',
headers: {
'Authorization': `Basic ${encodedAuthorization}`,
...data.getHeaders()
},
data : data
};
Basic-Auth-Authentication-Scheme函数如下:
- 客户端以“用户名”和“密码”的形式提供凭据。
- 用户名和密码用冒号连接:“用户名:密码”
- 连接的字符串以 base64 编码
- header 值就是前缀为“Basic”的 base64 编码字符串
下面你可以看到一个javascript实现:
const userName = "username"
const password = "password"
const authenticationHeader = "Basic " + btoa(`${userName}:${password}`)
我已经格式化了一个 axios post 请求如下:
var config = {
method: 'post',
url: 'https://us.battle.net/oauth/token',
headers: {
'Authorization': 'Basic '+process.env.BATTLENET_CLIENT+':'+process.env.BATTLENET_SECRET,
...data.getHeaders()
},
data : data
};
这被 401 拒绝了。但是,当我从 Postman 中为此生成代码片段时,其功能是相同的,除了授权是生成的看似随机的字符串:
var config = {
method: 'post',
url: 'https://us.battle.net/oauth/token',
headers: {
'Authorization': 'Basic reallyRandomLongStringIsNotClientIDAndSecretKey=',
...data.getHeaders()
},
data : data
};
将其插入我的代码使其工作。我很好奇在编写 Basic Auth 凭据时是否遗漏了什么,因为 Postman 似乎 converted/encrypted 把它变成了我无法弄清楚的东西?
您只需要将包含用户名和 password/secret 的字符串编码为 Base64,如下所示:
const encodedAuthorization = Buffer.from(`${process.env.BATTLENET_CLIENT}:${process.env.BATTLENET_SECRET}`).toString('base64')
var config = {
method: 'post',
url: 'https://us.battle.net/oauth/token',
headers: {
'Authorization': `Basic ${encodedAuthorization}`,
...data.getHeaders()
},
data : data
};
Basic-Auth-Authentication-Scheme函数如下:
- 客户端以“用户名”和“密码”的形式提供凭据。
- 用户名和密码用冒号连接:“用户名:密码”
- 连接的字符串以 base64 编码
- header 值就是前缀为“Basic”的 base64 编码字符串
下面你可以看到一个javascript实现:
const userName = "username"
const password = "password"
const authenticationHeader = "Basic " + btoa(`${userName}:${password}`)