验证服务器上检索到的Firebase UID

伊瓦尔·瑞克斯(Ivar Reukers)

我正在使用Firebase,angularfire2它允许使用Facebook,Google +和Twitter进行身份验证。

现在,当用户像这样进行身份验证时,我得到的响应如下所示。

{
"uid":"someUID",
"displayName":"ivaro18",
"photoURL":"https://lh3.googleusercontent.com/-myPicture/photo.jpg",
"email":"[email protected]",
"emailVerified":true,
"isAnonymous":false,
"apiKey":"aUUIDApiKey",
"appName":"[DEFAULT]",
"authDomain":"mydemo.firebase.com",
"stsTokenManager":{
    "apiKey":"aUUIDApiKey",
    "refreshToken":"AHugeRefreshToken",
    "accessToken":"aHugeAccessToken",
    "expirationTime":1481297860666
},
"redirectEventId":null
}

身份验证有效,并且可以检索用户数据(providerData由于在JSON中没有用因此将其遗漏-不会使用)

我会送这uid还是apiKey我的REST API(通过Angular2的http.post),但要防止人在这方面的中间人攻击,我想验证令牌。

所以(编辑:添加了ifisComplete

    @JvmStatic fun main(args: Array<String>) {
        println("yes")
        val options = FirebaseOptions.Builder()
                .setServiceAccount(
                        FileInputStream("C:/Users/ivaro18/firebase.json")
                ).setDatabaseUrl("https://myDemo.firebaseio.com")
                .build()
        FirebaseApp.initializeApp(options)

        if(
        FirebaseAuth.getInstance().verifyIdToken("whatToken?")
                .addOnSuccessListener(OnSuccessListener<FirebaseToken>() {
                    @Override
                    fun onSuccess(decodedToken: FirebaseToken) {
                        val uid = decodedToken.getUid()
                        println("UID:::" + uid)
                    }
                })
                .addOnFailureListener(OnFailureListener() {
                    @Override
                    fun onFailure(e: Exception) {
                        e.printStackTrace()
                    }
                })
                .addOnCompleteListener(OnCompleteListener<FirebaseToken>() {
                    @Override
                    fun onComplete(token: FirebaseToken) {
                        println("Token: " + token)
                    }
        }).isComplete()) {
           println("verification completed");
        }
        println("ok")
    }

但是,此代码输出(Kotlin btw,与Java几乎相同的语法,并且可以运行Java代码)

yes
verficiation completed
ok

然后过一会终止。我希望听众之一被解雇吗?代码有什么问题?

我应该在JSON数组中验证哪个ID FirebaseAuth

编辑

uidJSON一部分与Firebase身份验证页面(如下所示)中提到的UID相同。

Firebase控制台

我要检查的值UID是否等于UID控制台上的。(最好是发送apiKey和,accessToken但是现在检查是否uid相同就足够了。

用户名

试试这个:

import com.google.firebase.FirebaseApp
import com.google.firebase.FirebaseOptions
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseToken
import com.google.firebase.tasks.Task
import com.google.firebase.tasks.Tasks
import java.io.FileInputStream

class Firebase {
val options = FirebaseOptions.Builder()
    .setServiceAccount(
        FileInputStream("your/url/to/firebase.json")
    ).setDatabaseUrl("https://your-application.firebaseio.com")
    .build()

    fun validateToken(accessToken: String) {
        val firebaseAuth = FirebaseAuth.getInstance(FirebaseApp.initializeApp(options))

        val authTask: Task<FirebaseToken> = firebaseAuth.verifyIdToken(accessToken)
        try{
            Tasks.await(authTask)
        } catch (e: Exception) {
            //handle exception
        }
        // retrieve uid/email/name
        authTask.getResult().uid
    }
}

就像Stefan所说的,看一下这个Java示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章