为啥我会收到 `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 响应?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到 CancelledKeyException?

为啥我会收到此错误

为啥我会收到这个 TypeError?

为啥我会收到序列化错误?

为啥我会收到错误消息?

知道为啥我会收到此错误吗?