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

Expo + Auth0 集成PKCE授权流报错:无法验证code verifier

PKCE code verifier 校验失败问题解决方案

根因定位

你提供的base64URLEncode实现不符合Base64URL编码规范,这是触发错误的核心原因:
标准Base64URL编码规则要求:

  • 将+替换为-
  • 将/替换为_
  • 移除末尾的填充字符=
    你的代码中将/错误替换为了-,导致生成的code_challenge和Auth0侧计算的结果不匹配,最终校验失败。

修复后的代码

import crypto from "crypto" // Node crypto package
const base64URLEncode = (str) => {
  return str.toString('base64')
    .replace(/\+/g, '-')
    .replace(/\//g, '_') // 此处将/替换为_,而非-
    .replace(/=/g, '')
}

const sha256 = (buffer) => {
  return crypto.createHash('sha256').update(buffer).digest();
}

export const createVerifier = () => {
  return base64URLEncode(crypto.randomBytes(32));
}

export const createChallenge = (verifier) => {
  return base64URLEncode(sha256(verifier))
}

export const generateState = () => {
  return Math.random().toString(36).substring(2, 15)
}

// 注意:verifier生成后需要持久化存储,换token时必须使用同一个verifier,不能重新生成
const verifier = createVerifier()
const challenge = createChallenge(verifier)

其他需确认的配置项

  • 发起授权请求时必须指定code_challenge_method=S256,不能使用plain
  • verifier生成后必须本地持久化存储,授权完成后取同一个值调用oauth/token接口,不能生成新的verifier
  • 调用oauth/token接口时,传入的redirect_uri必须和授权请求时的redirect_uri完全一致,字符不能有任何差异
  • 调用oauth/token接口时参数名不能写错,verifier对应的参数名为code_verifier

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:03