gpt4 book ai didi

firebase - 使用 Firebase 验证用户手机号码的正确方法

转载 作者:行者123 更新时间:2023-12-04 23:14:53 26 4
gpt4 key购买 nike

我知道我可以使用 Firebase's电话验证在AndroidiOS ,但问题是客户端验证的信息很容易在客户端伪造,因为我只使用服务器端SSL证书,所以只有客户端知道服务器是可信的。

所以,我决定在服务器端发送手机号码并在那里检查:发送验证码并向用户询问此验证码。但是我看不到任何 C++ 服务器 Firebase SDK , 仅客户端 C++ SDK 可用。
所以,我有两个选择:

  • 了解如何在服务器端信任客户端验证(请注意,我可以拥有不受信任的客户端)?所以,这意味着我可以使用主要的 Firebase 电话号码身份验证方法。
  • 使用服务器端电话验证。

  • 请帮助我解决 Firebase 中的这个误解。

    最佳答案

    客户端绝对在这里工作。流程是这样的:

  • 您使用电话号码请求登录
  • Firebase 电话身份验证服务器向该号码发送代码
  • 用户将您的代码输入到您的应用中,该应用将其发送到 Firebase 身份验证服务器
  • Firebase 身份验证服务器返回一个 Firebase 身份验证 token

  • 这是有效的,因为恶意用户只有在拥有您的手机时才能知道代码。它不保证该设备是具有该电话号码的设备(用户可以有两部电话,或在笔记本电脑上使用电话登录),但它确实验证了用户可以访问该号码。

    为了验证到您自己的后端,您需要检索 Firebase ID token 。这只是一小部分 base64 编码的 JSON,但重要的是它由 Firebase 加密签名。这意味着在您的服务器上,您可以针对其中包含的用户和电话号码验证它是否真的由 Firebase 创建。用户无法在无法访问基础帐户的情况下生成这些 token 之一。

    请参阅 verifying ID tokens 上的文档更多!

    因此,您的下一步将是:

    检索 Firebase ID token

    您可以在登录后随时执行此操作。
    FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
    mUser.getToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
    public void onComplete(@NonNull Task<GetTokenResult> task) {
    if (task.isSuccessful()) {
    String idToken = task.getResult().getToken();
    // Send token to your backend via HTTPS
    // ...
    } else {
    // Handle error -> task.getException();
    }
    }
    });

    在服务器上验证 ID token 的内容。

    管理 SDK 是开箱即用的,用于检查 ID token 的正确证书、受众、到期时间和其他重要属性。
    admin.auth().verifyIdToken(idToken)
    .then(function(decodedToken) {
    var uid = decodedToken.uid;
    // ...
    }).catch(function(error) {
    // Handle error
    });
    decodedToken也将包含电话号码的属性!

    关于firebase - 使用 Firebase 验证用户手机号码的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225488/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com