我正在尝试对OneLogin的api进行JWT access_token验证,如下所述。此处. 我的代码如下。
const client_id = MY_CLIENT_ID
const client_secret = MY_CLIENT_SECRET
const token = MY_ONE_LOGIN_JWT_ACCESS_TOKEN
axios
.post(
"https://my-endpoint-dev.onelogin.com/oidc/2/token/introspection",
{ token, client_id, client_secret, token_type_hint: "access_token" },
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
}
)
.then((response) => {
console.log("response");
console.log(response);
})
.catch((err) => {
console.log("err");
console.log(err);
});
端点似乎工作得很好,事实上,当JWT过期时,它给我一个错误说明,我需要更新我传递的令牌。然而,每当我使用有效的凭证和令牌发出如上所示的标准请求时,我都会得到以下错误响应。
{error: "invalid_request", error_description: "no client authentication mechanism provided"}
在所提供的页面上,没有任何文档描述当收到该错误时,请求有什么问题。从文档中,据我所知,我的请求格式正确。
我已经验证了OneLogin中的令牌端点被设置为POST,所以我的假设就是 client_secret
应该在正文中的内容被记录为正确的(尽管我尝试以Basic的方式来验证)。
我试图寻找一个解决方案,但唯一接近我所找到的建议,即 Content-Type
头信息可能没有被提供。我已经确保将其添加到头文件列表中,并已验证它显示在请求中,但错误仍然存在。
有什么想法,我可能遗漏了什么?
EDIT:
试图做一个cURL请求 并收到了200个相同信息的回复。这让我相信是我的axios调用出了问题。
当我没有提供client_id或client_secret时,我得到了这个消息。希望你能验证你的请求中是否真的发送了这两个信息。也许你可以尝试通过邮递员发送请求来仔细检查。