我正在为我的网络/移动应用程序使用 firebase,现在我也希望使用一个后端 API。
API 需要一个 JWT token 来验证请求并设置它,我需要指定用于加密/解密 token 的 JWT secret 。
在 firebase 中,我相信我使用检索 token
const token = await firebase.auth().currentUser.getIdToken();这是我传递给 API 的内容。
但是,我还没有弄清楚在哪里可以配置 JWT-secret?我已经尝试了 firebase 控制台中显示的 API key ,我还尝试了在我的控制台中找到的服务器/客户端 key https://console.developers.google.com .
但是,无论如何,在尝试向 API 调用发出请求时,我都会收到 JWSInvalidSignature。
有没有人让这个工作?我在哪里可以从 firebase 获取 JWT-secret 以在 API 后端进行配置?提前致谢。
以下是详细信息:
1. 我正在使用一个名为 postGrest 的服务,它会在 postgres DB 之上自动创建一个 Web API。为了对请求进行身份验证,您通过指定一个名为“role”的自定义声明来配置服务,您还需要指定 JWT-secret 以便它可以解码 token 。
这是我对 API 的简单调用:
const fetchdata = async () => {
const token = await firebase.auth().currentUser.getIdToken();
let axiosConfig = {
headers: {
'Authorization': 'Bearer' + token
}
}
const data = await axios.get(`http://localhost:8080/users`,
axiosConfig);
}
另请注意,我可以使用以下代码在 bash 命令行中模拟这一点:请注意,我从上面的 getIdToken() 获取 token 。
export TOKEN="eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ2YzM5Mzc4YWVmYzA2YzQyYTJlODI1OTA0ZWNlZDMwODg2YTk5MjIiLCJ0eXAiOiJKV1QifQ.eyJ1c2VyaWQiOiI1NSIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS9wb3N0Z3Jlc3QtYjRjOGMiLCJhdWQiOiJwb3N0Z3Jlc3QtYjRjOGMiLCJhdXRoX3RpbWUiOjE1NzExNTIyMjQsInVzZXJfaWQiOiJNMXZwQ3A2ZjlsaFdCblRleHh1TjlEdXIzUXAyIiwic3ViIjoiTTF2cENwNmY5bGhXQm5UZXh4dU45RHVyM1FwMiIsImlhdCI6MTU3MTE1OTQ0NSwiZXhwIjoxNTcxMTYzMDQ1LCJlbWFpbCI6InNwb25nZWJvYkBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZW1haWwiOlsic3BvbmdlYm9iQGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6InBhc3N3b3JkIn19.nKuovs0Gx_ZKp17dI3kfz6GQofIMEOTA8RqTluwEs-5r-oTbKgpG33uS7fs7txVxvWIb_3fbN3idzfDHZevprMkagbHOd73CxTFBM7pr1bD2OKSK9ZPYfSt9OhvgJL51vBN3voLcNAb5iWVVl2XMqkcXeDoBi8IOKeZr27_DsRx48GSi7HieHWscF1lujSEr2C9tdAek3YyNnr3IcGI8cTSPHPaIbYl-8CaHQO2fUiGHEAaD7sqHxp3otJio56zOoNAy44P_nwORlMFZC0Rm8SaATpbmIkgbGYWHZHty70lmlYGVHTuM_hr2s7z2YhAjuacvBMgusZpyoVnoe3FQeA"
curl http://localhost:8080/contacts -H "Authorization: Bearer $TOKEN"
返回的是: {"message":"JWSError JWSInvalidSignature"}
对于 JWT 的 secret ,我尝试了几个值,但似乎没有一个有效。这包括来自 firebase 项目的“API key ”,以及尝试下载新 .json 文件的“生成 key ”,其中有一个“private_key”:即字符串。
最佳答案
来自 your service account下载的文件,使用 private_key
验证/解码您从 getIdToken()
获得的 JWT token 的值...
steps for using a third-party library要验证 Firebase 身份验证 ID token ,请更详细地描述它。
关于firebase - 您从 Firebase 哪里获取/找到 JWT-Secret?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399462/