为什么需要前端存储 firebase 令牌?
Why need front end stores firebase token?
我正在制作一个网络应用程序。前端是反应,服务器端是 rails api 并且我使用 firebase 身份验证。
现在,每当调用 rails api 时,我都会获得 firebase 令牌并设置授权 header,如下所示。
client.interceptors.request.use(
async (config) => {
config.headers['Content-type'] = 'application/json'
config.withCredentials = true
var token = await firebaseApp.auth().currentUser?.getIdToken()
config.headers['Authorization'] = `Bearer ${token}`
return config
},
(error: AxiosError) => {
throw new Error(error.message)
}
)
但是,我找到了一些存储令牌的方法、不安全的本地存储、仅限 http 的 cookie。
为什么需要前端存储 firebase 令牌?每次调用都拿到token不好吗rails api?
Firebase ID 令牌基本上是 JWT,由 Firebase 签名。
现在想象一个场景,您需要在服务器中识别用户。您可能会在 HTTP 请求中传递用户的 UID,这是不安全的,因为除非您的服务器中有某种速率限制,否则很容易被暴力破解。
签名是什么意思?
JWT 类似于:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
上面JWT存储的数据是:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
您需要 verify 使用 Firebase Admin SDK 的那些 Firebase IDTokens。我不知道这是否适用于 Ruby 但值得检查上面的 link。
验证这些将 return 一个具有用户身份验证信息的对象,如果是无效的 JWT,则会出现错误。
您必须始终在您的 REST 请求中将此 JWT 传递给您的服务器,因为这些不能被强制执行。任何人都可以制作具有相同内容的 JWT (IDToken),但他们不知道您的签名。他们将需要您的 Firebase 服务帐户凭据才能执行此操作。
此外,JWT 最终会过期(我假设一个小时后)。所以一次次拿到token也不错。这就是他们的目的。短期访问。
我推荐你看这个JWT Tutorial。
请务必将 idToken 传递给您的 REST API 以验证用户而不是他们的 UID。
我正在制作一个网络应用程序。前端是反应,服务器端是 rails api 并且我使用 firebase 身份验证。 现在,每当调用 rails api 时,我都会获得 firebase 令牌并设置授权 header,如下所示。
client.interceptors.request.use(
async (config) => {
config.headers['Content-type'] = 'application/json'
config.withCredentials = true
var token = await firebaseApp.auth().currentUser?.getIdToken()
config.headers['Authorization'] = `Bearer ${token}`
return config
},
(error: AxiosError) => {
throw new Error(error.message)
}
)
但是,我找到了一些存储令牌的方法、不安全的本地存储、仅限 http 的 cookie。 为什么需要前端存储 firebase 令牌?每次调用都拿到token不好吗rails api?
Firebase ID 令牌基本上是 JWT,由 Firebase 签名。 现在想象一个场景,您需要在服务器中识别用户。您可能会在 HTTP 请求中传递用户的 UID,这是不安全的,因为除非您的服务器中有某种速率限制,否则很容易被暴力破解。
签名是什么意思?
JWT 类似于:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
上面JWT存储的数据是:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
您需要 verify 使用 Firebase Admin SDK 的那些 Firebase IDTokens。我不知道这是否适用于 Ruby 但值得检查上面的 link。
验证这些将 return 一个具有用户身份验证信息的对象,如果是无效的 JWT,则会出现错误。 您必须始终在您的 REST 请求中将此 JWT 传递给您的服务器,因为这些不能被强制执行。任何人都可以制作具有相同内容的 JWT (IDToken),但他们不知道您的签名。他们将需要您的 Firebase 服务帐户凭据才能执行此操作。
此外,JWT 最终会过期(我假设一个小时后)。所以一次次拿到token也不错。这就是他们的目的。短期访问。
我推荐你看这个JWT Tutorial。 请务必将 idToken 传递给您的 REST API 以验证用户而不是他们的 UID。