Obtaining/using Firebase 智威汤逊

Obtaining/using Firebase JWT

早期使用 Firebase 文档,到目前为止非常喜欢它。作为 n00b,这里有一个概念性问题 - Firebase 身份验证生成的 (JWT) 令牌是否可在客户端访问?

我想调用一些 外部 服务并希望利用 JWT 作为安全机制。所以:

本质上,利用现有的 Firebase 机制作为 "gateway" 外部服务的一种形式。

我在这里看到了一个 old answer - "。...页面重新加载后仍然存在的令牌,然后您需要以某种方式存储它,以便客户端..."=30 =] - 这是 token 还是 JWT

谢谢!

Firebase 确实将 JWT 保存在本地存储中。

JSON.parse(localStorage.getItem("firebase:session::<app-name>")).token

您也可以从 authData 中获取它,它可用作 token 属性.

的值
ref.onAuth(function(authData) { console.log(authData.token); })

但首选方法是按照 Chris 在评论中所说的进行操作:

ref.getAuth().token

这是获取firebase JWT token的正确方式

firebase.auth().currentUser.getToken().then(function(token){
  console.log(token);
});

对于希望在 Swift 4 中执行此操作的任何未来 SO-goers,这里有一个片段可以让您的生活更轻松:

        // Force refresh from Firebase if token is expired (pass true) 
        // or deliberately do not refresh if expired (pass false)

        Auth.auth().currentUser?.getIDTokenForcingRefresh(true, completion: { (token, error) in
            if error != nil {
                print("Network Auth Error: \(String(describing: error?.localizedDescription)))")

            } else {
                // do something with token
            }
        })

        // If you don't care about the refresh
        Auth.auth().currentUser?.getIDToken(completion: { (token, error) in
            if error != nil {
                print("Network Auth Error: \(String(describing: error?.localizedDescription)))")

            } else {
                // do something with token
            }
        })

2020 年 11 月的答案

拥有 FirebaseAuth 实例后,您可以使用一行代码获取令牌:

FirebaseAuth auth;
String token;

token = await auth.currentUser.getIdToken();

2021 年 3 月更新: getToken()不行,参考documentation

我们必须使用 getIdToken()

以下版本将在 Javascript

中运行
firebase.auth().currentUser.getIdToken(true).then(function(token){
  console.log(token);
});