You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在react-native-app-auth的令牌交换请求体中传递client_id和client_secret?

解决react-native-app-auth令牌交换时缺少client_id和client_secret的问题

我之前也碰到过一模一样的情况!很多自定义OAuth服务器不遵循默认的Basic Auth认证逻辑,反而要求把client_id和client_secret直接放在令牌交换POST请求的请求体里,而react-native-app-auth默认是用HTTP Basic Auth头来传递这两个参数的,这就导致服务器返回401未授权错误。

核心解决方案:指定令牌认证方式

你只需要在配置里添加tokenEndpointAuthMethod: 'client_secret_post',这个参数会强制库把client_id和client_secret放到POST请求体中,而不是用Basic Auth头传递。

修改后的完整配置代码:

const config = {
  issuer: 'https://example.dev',
  clientId: client_id,
  clientSecret: client_secret,
  redirectUrl: 'myapp://auth_success',
  scopes: scopes,
  // 关键配置:告诉库用POST请求体传递客户端凭证
  tokenEndpointAuthMethod: 'client_secret_post',
  serviceConfiguration: {
    tokenEndpoint: 'https://example.dev/access-token',
    authorizationEndpoint: 'https://example.dev', // 注意移除原URL末尾多余的问号
  }
};

为什么之前的尝试没用?

  • 用additionalParameters传递这两个参数时,库可能会因为默认的认证逻辑,同时在Basic Auth头和请求体里都放置这些参数,反而引发服务器的参数冲突;
  • customHeaders是用来添加自定义请求头的,和请求体参数完全是两个位置,自然不会被服务器识别。

额外注意点

如果你的服务器要求用multipart/form-data格式接收请求体,你可能需要额外配置参数编码方式,但大部分情况下,client_secret_post配合默认的application/x-www-form-urlencoded格式就能满足需求。

内容的提问来源于stack exchange,提问作者Luke Rogerson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:16:53