为啥我会收到 `invalid_request`:`no client authentication mechanism provided` 的 400 响应?
Posted
技术标签:
【中文标题】为啥我会收到 `invalid_request`:`no client authentication mechanism provided` 的 400 响应?【英文标题】:Why am I receiving a 400 response of `invalid_request`:`no client authentication mechanism provided`?为什么我会收到 `invalid_request`:`no client authentication mechanism provided` 的 400 响应? 【发布时间】:2020-08-23 00:02:40 【问题描述】:我正在尝试针对 OneLogin 的 api 验证 JWT access_token,如 here 所述。我的代码如下:
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 中的 Token Endpoint 设置为 POST,因此我认为 client_secret
应该在正文中的假设被记录为正确(尽管我确实尝试将其作为 Basic 来验证):
我已尝试寻找解决方案,但我发现的唯一接近的建议是可能未提供 Content-Type
标头。我已确保将其添加到标头列表中并已验证它显示在请求中,但错误仍然存在。
对我可能在这里遗漏的内容有什么想法吗?
编辑:
尝试执行 cURL 请求并收到带有相同信息的 200 响应。让我相信我的 axios 调用不正确。
【问题讨论】:
【参考方案1】:当我没有提供 client_id 或 client_secret 时,我会收到此消息。希望您可以验证您是否确实在请求中发送了两者。也许您可以尝试通过邮递员的请求进行仔细检查。
【讨论】:
我已验证 client_id 和 client_secret 是通过请求正文中的 axios 发送的。通过 cURL 或 Postman 尝试时,我没有收到相同的错误,但是令牌总是以非活动状态返回。我不确定 axios 调用中可能缺少什么,但奇怪的是站点文档没有提到这个错误。【参考方案2】:我遇到了同样的问题,最后发现您必须将数据转换为查询字符串:https://axios-http.com/docs/urlencoded
例如:
import qs from 'qs';
const data = 'bar': 123 ;
const options =
method: 'POST',
headers: 'content-type': 'application/x-www-form-urlencoded' ,
data: qs.stringify(data),
url,
;
axios(options);
【讨论】:
以上是关于为啥我会收到 `invalid_request`:`no client authentication mechanism provided` 的 400 响应?的主要内容,如果未能解决你的问题,请参考以下文章