【问题标题】:Firebase client error: Custom token corresponds to a different audienceFirebase 客户端错误:自定义令牌对应于不同的受众
【发布时间】:2019-03-25 23:36:39
【问题描述】:

我正在使用 Firebase Python AdminSDK 生成自定义令牌,Javascript 客户端使用该令牌登录 Firebase。当 JS 客户端尝试使用自定义令牌进行身份验证时,它会收到错误“自定义令牌对应于不同的受众”。

给出的错误代码:'auth/custom-token-mismatch'。

关于“受众”不匹配参考分析的许多 Google 答案。但我正在做一个 Web 项目,而不是 iOS 或 Android,所以我无法使用 Analytics 来管理受众。

我读过的 SO 答案列在最后,如下所示。

我捕获了自定义令牌并将其插入https://jwt.io/,值和实例化/到期时间(相隔一小时)看起来都不错:

在 jwt.io 上解码的自定义令牌:

{
  "claims": {},
  "uid": "<myuniqueID",
  "sub": "firebase-adminsdk-1knpr@firebase-<myproject>.iam.gserviceaccount.com",
  "iss": "firebase-adminsdk-1knpr@firebase-<myproject>.iam.gserviceaccount.com",
  "iat": 1540153710,
  "aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
  "exp": 1540157310
}

Python 服务器:

def getFirebaseInstance():  # For Firebase Python SDK
  try:
    currentDir_path = os.path.dirname(os.path.realpath(__file__))
    cred = credentials.Certificate(currentDir_path + '/includeFirebaseServiceAccounts/firebase-<myprojectname>-firebase-adminsdk-1knpr-e1244dd261.json')  
    firebaseAdmin = firebase_admin.initialize_app(cred, { 'databaseURL': 'https://<myprojectname>.firebaseio.com', 'databaseAuthVariableOverride': {'uid':'<myuniqueServerID>'}})
    if firebaseAdmin:
      return(firebaseAdmin)
  except:
    raise


def firebaseClientToken(request):
  try:
    uid = "<myuniqueClientID>"  # case sensitive
    additional_claims = { }
    token = auth.create_custom_token(uid,additional_claims)
    return HttpResponse(token)
  except Exception as err:
    return HttpResponse("System error:" + str(err), status=406)

Javascript 客户端:

(
function authClient2Firebase() {
  $.ajax({
    url: "firebaseClientToken/",
    method: "POST",
    success: function(response) { step2(response); },
    error: function(xhr) { alert("There was an error loading a security check.  Have you lost your internet connection?  Detail:" + xhr.responseText); }
  });

  function step2(customToken) {
    try {
      firebase.auth().signInWithCustomToken(customToken).catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
          alert("There was an error with the secure login. \n\nDetail: " + errorMessage + '\nCode: ' + errorCode);
      });
    }
    catch(err) {
      alert(err);
    }

    console.log("authClient2Firebase.js: Firebase login succeeded!");
  }
}

)();

我在控制台“设置”页面下的项目确实有一个 Web API 密钥,但我没有看到它在任何地方被使用。

在控制台的“设置”->“用户和权限”页面下只有一个用户,我。

控制台“设置”->“服务帐户”页面上只列出了一个服务帐户。我尝试删除该页面上的所有秘密,生成一个新秘密,然后生成并安装一个新的蓝色按钮“秘密”(坏名,实际上它会生成一个完整的 json 凭据对象)。

这些是控制台“身份验证”->“登录方法”中列出的域:

localhost                      Default
<myproject>.firebaseapp.com    Default
127.0.0.1                      Custom
auth.firebase.com              Custom

我实际使用的域名是localhost:8000,这里不能输入。

SO 未成功咨询的答案:

The custom token corresponds to a different audience (我没有使用密钥,除了存储在 ServiceAccount 中的 凭据。)

Firebase token error, "The custom token corresponds to a different audience."

Firebase custom auth issue token different audienceenter link description here(关闭,但我没有使用 Node 服务器和 不知道他所说的服务器“必须属于同一个项目”是什么意思 因为 Python 服务器没有以任何方式注册,除非通过 我下载的 ServiceAccount 凭据。)

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    令人尴尬但确实如此,事实证明这是一个简单的疏忽。当 JS 客户端将自身初始化为 Firebase 应用时,在进行身份验证之前,它使用的是来自测试环境的旧凭据。

      // Initialize Firebase
      var config = {
        apiKey: "<WebAPI from Firebase console, 'Project Settings'>",
        authDomain: "<myproject>.firebaseapp.com",
        databaseURL: "https://<myproject>.firebaseio.com",
        projectId: "<myproject>",
        storageBucket: "<myproject>.appspot.com",
        messagingSenderId: "<id from Console Project Settings>"  // optional
      };
    
      firebase.initializeApp(config);
    

    【讨论】:

    • 如果您使用不同的 Firebase 项目进行测试,请不要忘记通过 Firebase 控制台启用您在测试项目中使用的身份验证方法。
    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 2016-12-28
    • 2023-03-25
    • 2019-01-10
    • 1970-01-01
    • 2015-11-07
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多