我目前正在编写API以尝试获得代币。我快到了,但在最后一关跌倒了…
const fs = require('fs');
const https = require('https');
const ConfigParams = JSON.parse(fs.readFileSync('Config.json', 'utf8'));
const jwt = require('jsonwebtoken');
const apikey = ConfigParams.client_id;
var privateKey = fs.readFileSync(**MY KEY**);
var tkn;
const jwtOptions = {
algorithm: 'RS512',
header: { kid: 'test-1' }
}
const jwtPayload = {
iss: apikey,
sub: apikey,
aud: **API TOKEN ENDPOINT**,
jti: '1',
exp: 300
}
jwt.sign(jwtPayload,
privateKey,
jwtOptions,
(err, token) => {
console.log(err);
//console.log(token);
tkn = token;
let = tokenPayload = {
grant_type: 'client_credentials',
client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer/',
client_assertion: tkn
}
tokenAuthOptions = {
payload: tokenPayload,
host: **HOST**,
path: **PATH**,
method: 'POST',
}
https.request(
tokenAuthOptions,
resp => {
var body = '';
resp.on('data', function (chunk) {
body += chunk;
});
resp.on('end', function () {
console.log(body);
console.log(resp.statusCode);
});
}
).end();
}
)
编码的令牌在第一部分返回正常,https请求尽管返回了问题。
我得到的响应是grant_type丢失,所以我知道由于这个x-www-form-urlencoded我有一个格式问题,但是我不知道如何修复它。
这是网站所说的:
您需要在请求正文中以 x-www-form-urlencode 格式包含以下数据:
grant _ type = client _ credentials client _ assertion _ type = urn:IETF:params:oauth:client-assertion-type:jwt-bearer client _ assertion =
curl-X POST-H“内容类型:application/X-www-form-urlencoded”--data\“grant_type=client_credentials\
理想情况下,我想要一个使用https请求的解决方案,但如果不可能,我愿意接受其他解决方案。
任何帮助都非常感谢。
谢谢克雷格
编辑-我根据以下建议更新了代码:
const params = new url.URLSearchParams({
grant_type: 'client_credentials',
client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer/',
client_assertion: tkn
});
axios.post("URL", params.toString()).then(resp => {
console.log("response was : " + resp.status);
}).catch(err => {
console.log("there was an error: " + err);
})
但我仍然收到错误代码400,但现在不太详细说明原因。(错误代码400有多条消息失败)
邮差是最好的。
感谢@Anatoly的支持,它帮助我找到了正确的方向。我第一次使用postman时运气不好,发现它有一个代码片段部分,使用node.js有四种不同的实现方式。
Axion的解决方案是:
const axios = require('axios').default;
const qs = require('qs');
var data = qs.stringify({
'grant_type': 'client_credentials',
'client_assertion_type': 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
'client_assertion': tkn
});
var config = {
method: 'post',
url: '',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.status));
})
.catch(function (error) {
console.log(error);
});
我认为问题是,我没有将信息传递到“data:”中,同时还存在查询字符串问题。使用qs。stringify格式化对象,然后将其传递给data:key解决了这个问题。
问题内容: REST API映射到Java对象时,采用输入内容类型: 在表单输入请求中,我正在设置my_name和my_phone的值,但是MyRequest对象带有myName和myPhone作为空值。 我正在使用Jackson批注2.3 jar 有什么建议可能有什么问题吗? 问题答案: 我最近在使用SpringMVC和Jackson时遇到了同样的问题! 在Spring中,当您将端点显式配置为仅
它回来了 对此有什么建议吗?内容类型应为application/x-www-form-urlencoded。
spring-cloud-starter-openfeign 2.1.1.发行版 我还尝试添加假表单依赖项和@param而不是@requestparam,但没有成功。
如何在application/x-www-form-urlencoded格式(JAVA)的HTTPURLConnection中为POST调用添加主体 JDK版本是1.8 已尝试的代码:
我有一个SOAP客户端发送一个请求,它的内容类型定义为应用程序/x-wow-form-urlencoded。我的jax-ws服务器响应HTTP 415错误,抱怨它需要文本/xml的内容类型。 显然,无法更改此客户端,因此我正在尝试找出是否有任何方法可以强制我的服务器接受此内容类型?
问题内容: 之间有什么区别 request.ContentType =“ application / json; charset = utf-8”; 和 webRequest.ContentType =“ application / x-www-form-urlencoded”; 问题答案: 第一种情况是告诉Web服务器您正在发布JSON数据,如下所示: 第二个选项是告诉Web服务器您将对URL中