MongoDB自定义JWT认证报错'aud'声明未找到'hrms-dev'如何解决?
MongoDB + Firebase自定义JWT认证报错解决方案
- 核对JWT的
aud声明值:Firebase默认生成的自定义JWT的aud为https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit,你需要在生成JWT的代码中手动指定aud为你配置的hrms-dev,Node.js环境下使用Firebase Admin SDK生成的示例代码如下:
const additionalClaims = { // 你需要的自定义元数据字段 email: "user@example.com" } const customToken = await admin.auth().createCustomToken(uid, additionalClaims, { audience: "hrms-dev" })
- 核对JWT的
iss(签发者)声明:MongoDB配置的JWT提供商签发地址必须和JWT的iss完全一致,使用Firebase作为签发方时,iss固定为https://securetoken.google.com/<你的Firebase项目ID>,请替换为你实际的Firebase项目ID后填入MongoDB提供商配置的签发者字段。 - 核对签名验证公钥配置:MongoDB验证JWT签名需要用到Firebase的公钥,推荐使用JWKS URI进行配置,Firebase官方固定JWKS地址为
https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com;如果选择手动上传公钥,请确保上传的是Firebase服务账号对应的公钥,无多余换行、空格等格式错误。 - 核对元数据字段映射:MongoDB中配置的用户字段映射,必须和JWT payload中的字段名完全一致,例如你配置使用
email作为用户唯一标识字段,则JWT payload中必须存在email字段且值不为空。 - 检查JWT生效/过期时间:MongoDB会自动拒绝已过期、还未到生效时间的JWT,请确保生成JWT时
exp(过期时间)和nbf(生效时间)配置正确,同时排查服务器时间差导致的验证失败问题。 - 规避ID Token的默认配置问题:如果你使用Firebase客户端SDK生成的IDToken直接访问MongoDB,其默认
aud为你的Firebase项目ID,不符合你配置的hrms-dev要求,需要在后端用Admin SDK生成符合要求的自定义JWT后再用于MongoDB认证。
内容的提问来源于stack exchange,提问作者Ramesh Reddy
相关产品推荐
相关产品推荐

