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

Keycloak从22升级到25后,React Native获取用户信息失败求助

Keycloak 22→25升级后React Native无法获取用户信息(401 Invalid Token)

升级Keycloak从22到25版本后,React Native应用调用用户信息接口时返回401 Unauthorized,Keycloak日志提示invalid_token,原因是Failed to read access token from JWT。已尝试以下方案但无效:

  • 将Realm Frontend地址设为http://localhost:8080/realms/myrealm
  • 为默认客户端范围添加openid scope
  • 修改React Native应用中的Keycloak地址为http://localhost:8080/realms/myrealm

前端调用代码

const getUserInfo = await fetchUserInfoAsync(tokenResult, discoveryResult!);

Keycloak报错日志

2024-07-30 22:52:33 2024-07-31 05:52:33,095 WARN  [org.keycloak.events] (executor-thread-4) type="USER_INFO_REQUEST_ERROR", realmId="a8f79f64-1833-4832-9b3a-079763cb6fc3", realmName="myrealm", clientId="null", userId="null", ipAddress="172.17.0.1", error="invalid_token", reason="Failed to read access token from JWT", auth_method="validate_access_token"

React Native报错位置代码(Fetch.js第42行)

// Fix a problem with React Native `URL` causing a trailing slash to be added.

const correctedUrl = url.toString().replace(/\/$/, '');
const response = await fetch(correctedUrl, request); ---> (error here: 401 Unauthorized)
const contentType = response.headers.get('content-type');
if (isJsonDataType || contentType?.includes('application/json')) {
    return response.json();
}

排查与解决步骤

  1. 检查Token签名算法兼容性
    Keycloak 24+版本默认将OIDC客户端的访问令牌签名算法从HS256改为RS256,对称密钥客户端易受影响:
  • 登录Keycloak控制台,进入目标客户端→Settings→Access Token Signature Algorithm,确认算法类型:
    • 临时兼容:将算法改回HS256(不推荐长期使用)
    • 标准方案:在React Native端配置使用Keycloak Realm的公钥验证RS256签名
  1. 验证Token的Issuer一致性
    确保前端获取的Token中iss字段与Keycloak Realm的Issuer完全匹配(包括协议、域名、端口、末尾斜杠):
  • 解码前端的access_token或id_token查看iss值
  • 对比Keycloak Realm的OpenID配置(访问http://localhost:8080/realms/myrealm/.well-known/openid-configuration查看issuer字段)
  • 不一致则调整React Native端的Discovery地址或Keycloak Realm的Frontend URL
  1. 检查客户端权限与Scope配置
  • 确认客户端Access Type设置为public(React Native应用常用类型)
  • 进入客户端→Client Scopes,确保openid、profile等必要Scope已添加到Default Client Scopes中
  1. 清理旧Token缓存
    升级后旧Token可能不符合新版本验证规则:
  • 清除React Native应用中存储的旧Token(如AsyncStorage中的相关条目)
  • 重新登录获取新Token后重试用户信息接口
  1. 检查Keycloak Realm的Token配置
  • 进入Realm设置→Tokens,确认Access Token Lifespan未过短,Token Signature Required处于开启状态
  • 查看Realm→Keys,确认签名用的密钥对未过期且状态有效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:48:20