auth0/auth0-react硬编码URL问题的替代React/Next.js认证库咨询
我完全理解你的困扰——这个问题虽然不算冷门,但auth0-react底层依赖的auth0-spa-js硬编码/connect/oauth/token令牌端点的设计,确实会和Duende Identity Server这类自定义了端点路径的身份提供商产生冲突。毕竟Duende默认的令牌端点是/connect/token,而标准的OIDC实现应该是从.well-known/openid-configuration动态拉取所有端点信息,而非硬编码固定路径。
针对你的需求,这里有几个适配性很强的替代方案,全部支持动态读取OIDC配置、原生实现带PKCE的授权码流,完美适配React或Next.js项目:
oidc-client-ts:这是经典oidc-client库的TypeScript重构版本,完全遵循OIDC标准规范。它会自动从你的Duende服务器的.well-known/openid-configuration端点拉取所有必要的URL(包括令牌端点),不需要手动硬编码。API灵活度高,不管是纯React还是Next.js项目都能轻松集成,PKCE支持是原生内置的,无需额外配置。Auth.js(原NextAuth.js):这是Next.js生态中最流行的认证解决方案之一,同时也支持纯React项目。它原生支持OIDC作为身份提供者,会自动读取IDP的开放配置来获取正确的令牌路径,内置PKCE机制,配置步骤简洁。除了OIDC,还支持多种其他认证方式,扩展性极强,适合需要多身份源的场景。
react-oidc-context:这是基于oidc-client-ts封装的React专用上下文组件,为React项目做了优化。它提供了开箱即用的Hooks和上下文,让你能在组件中轻松获取认证状态、用户信息等。同样会动态从OIDC配置端点拉取所有URL,彻底避免硬编码问题,对Duende Identity Server的兼容性拉满。
另外提一句:如果你暂时不想更换库,可以尝试查看auth0-spa-js的文档,看看是否支持手动覆盖令牌端点配置,但根据过往经验,auth0的库对非Auth0身份提供商的适配性有限,官方也没有针对这类场景的明确指引,所以更换标准OIDC库会是更稳妥的选择。
备注:内容来源于stack exchange,提问作者snayko

