问题是我正在尝试检索OAuth2令牌。由于request
已被弃用,因此我使用node-fetch
。虽然我可以让它与request
一起使用,但无法与node-fetch
一起使用。
我在这里读了很多帖子,但似乎没有一个真正给予一个一致的答案,实际上工作。我承认,我只是看起来不够好。也可能是复杂的,我 Package 在一个测试,但它不像是由于我得到的错误信息的情况。
下面是可以正常工作的代码(注意,我不得不修改细节来保护内部URL):
var request = require("request");
var options = {
method: "POST",
url: "https://some-url/realms/my-realm/protocol/openid-connect/token",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
form: {
username: "JeffUser",
password: "jeff-password",
grant_type: "password",
client_id: "jeff-client",
client_secret: "jeff-client"
}
};
request(options, function(error, response, body) {
if (error) throw new Error(error);
console.log(body);
})
这样就成功了,我得到了令牌。下面是我在node-fetch
中尝试的东西( Package 在测试中),但失败了:
const assert = require("chai").assert;
const fetch = require("node-fetch")
describe("Test API", function() {
let api_token = "";
it("gets a token", async function() {
api_token = await fetch("https://some-url/realms/my-realm/protocol/openid-connect/token", {
method: "post",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
form: {
username: "JeffUser",
password: "jeff-password",
grant_type: "password",
client_id: "jeff-client",
client_secret: "jeff-client"
}
}).then (response => {
return response.json();
});
console.log(token);
});
});
这里发生的是我从测试中得到了以下输出:
{
error: 'invalid_request',
error_description: 'Missing form parameter: grant_type'
}
我试着按照一些搜索的建议将form
更改为body
,但似乎没有任何效果。我试着按照一些其他搜索的建议将form: { }
数据 Package 为JSON.stringify()
,但也导致报告相同的错误。
3条答案
按热度按时间b1zrtrql1#
这要感谢@CBroe,他在评论中给了我答案。我会把解决方案放在这里,供其他遇到这个问题的人参考。下面是我必须做的:
我确保使用
body
而不是form
。我还使用URLSearchParams
创建了一系列参数,并将其传递给body
参数。这样就成功了!现在我获得了授权令牌。hmtdttj42#
1yjd4xko3#
将其放入Express应用程序请求中,即可开始