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

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

现在,当用户像这样认证时,我得到如下的响应。

 { "uid":"someUID", "displayName":"ivaro18", "photoURL":"https://lh3.googleusercontent.com/-myPicture/photo.jpg", "email":"myEmail@gmail.com", "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中不是有用的 – 将不会被使用)

我将把这个uidapiKey发送到我的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顺便说一句,几乎与Java相同的语法,它可以运行Java代码)

 yes verficiation completed ok 

然后在一段时间后终止。 我希望听众之一开火? 代码有什么问题?

那么我应该在FirebaseAuth验证那个JSON数组的ID?

编辑

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

Firebase控制台

我想检查UID是否等于控制台上的UID 。 (最好通过发送apiKeyaccessToken而只是检查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的例子。

Interesting Posts