【发布时间】:2021-05-30 18:19:18
【问题描述】:
我将在我的 Android 项目中使用 Firebase,我想使用 signInWithCustomToken 函数对用户进行身份验证。
我将从我的 Admin SDK(Python) 生成令牌并将其返回给用户,用户将使用该令牌进行身份验证。
我的问题是;
1 -> 我用密钥生成的令牌只能由我生成?我的意思是它对我来说是独一无二的吗?
uid = 'some-uid'
custom_token = auth.create_custom_token(uid)
如果有人使用相同的 uid 或者它总是唯一的,是否可以创建与我相同的令牌?
2 -> 有人可以手动设置 fireabase.auth.uid 变量,而不使用 firebase.authenticate 函数吗?
我的意思是如果有人得到了 auth.uid 而不是令牌,他可以将客户端中的 auth.uid 设置为 auth 变量吗?
感谢您的信息和回答...
【问题讨论】:
-
你可能对这个答案感兴趣stackoverflow.com/a/66185640/3371862
-
这不是我想要的。 Firebase 身份验证中禁用了我的所有登录方法。进行身份验证的唯一方法是使用我的自定义身份验证服务器构建与 Python 使用 Admin SDK。我使用自己的登录系统验证用户,如果用户验证我为该用户创建一个令牌并将其返回给用户。然后用户在 Android/Kotlin 中使用该令牌向 Firebase 进行身份验证。我要问的关键点是,有人可以在不使用我的身份验证服务器(1)的情况下重新生成/克隆该令牌吗?有人可以将他自己的 auth.uid 设置为他想要的值吗?感谢您的帮助和回答。
-
正如文档中here 解释的那样,“自定义令牌是签名的 JWT,其中用于签名的私钥属于 Google 服务帐户”。这实际上是 R.S.下面解释。如果恶意用户尝试使用未使用此私钥签名的 JWT(具有现有 uid),则安全规则检查将失败。因此,您评论中两个问题的答案是否定的。
-
所以如果我理解正确,没有人可以复制我创建的令牌,即使他们知道 uid,因为在创建该令牌时我用我的私钥对其进行签名。对于另一个问题,由于他们没有令牌,因此他们无法仅知道 uid 就可以向 firebase 进行身份验证。我说的对吗?
-
是的,你是对的。 (当然,您有责任正确保护您的服务器和您的 Google 帐户)
标签: python android firebase firebase-realtime-database firebase-authentication