如何在Auth0规则/动作中获取getAccessTokenSilently传入的自定义参数
解决方法
首先你当前的SDK调用写法有问题,这是绝大多数人拿不到自定义参数的核心原因:
- 如果你使用的是v2及以上版本的
@auth0/auth0-react,所有需要透传给Auth0授权端点的参数(包括audience、scope以及自定义字段),都必须嵌套在authorizationParams对象下,直接在顶层传自定义参数会被SDK忽略,根本不会发送到Auth0服务端。
修正后的客户端调用代码:
const { getAccessTokenSilently } = useAuth0(); const accessToken = await getAccessTokenSilently({ authorizationParams: { audience: 'myaudience', scope: 'read:read_users', foo: 'bar' // 自定义参数直接写在该对象内 } });
如果你还在使用v1版本的
@auth0/auth0-react,可以保持参数平级的写法,但v1已经停止维护,建议尽快升级。
参数正确传递后,在规则代码中可以直接通过上下文对象的请求查询参数属性读取自定义值,示例规则代码:
function(user, context, callback) { // 读取传入的自定义参数foo const fooValue = context.request.query.foo; // 如需把参数注入access token载荷,必须带自定义命名空间,否则会被Auth0过滤 if (fooValue) { context.accessToken['https://your-custom-namespace/foo'] = fooValue; } return callback(null, user, context); }
常见踩坑点
- 自定义注入token的声明必须带URL格式的命名空间(比如你自己的业务域名、Auth0租户域名格式都可以),不要直接写
context.accessToken.foo = xxx,这种非标准顶级声明会被Auth0自动剔除,不会出现在最终返回的token里。 - 如果读取不到值,先抓包查看
getAccessTokenSilently发起的/authorize请求,确认query参数中是否携带了foo字段,如果没带优先检查SDK传参结构是否正确。 - 该传参和读取方式对
loginWithRedirect、loginWithPopup等交互式登录方法同样生效。
内容的提问来源于stack exchange,提问作者Sharbal Shuker
相关产品推荐
相关产品推荐

