Firebase 是否可以使用id令牌进行电子邮件身份验证?

Firebase 是否可以使用id令牌进行电子邮件身份验证?,firebase,firebase-authentication,Firebase,Firebase Authentication,我正在为使用扩展的iOS应用程序创建POC。扩展必须知道用户是否经过身份验证。不幸的是,一个包含应用程序和一个扩展是独立的应用程序,这意味着我必须在某个地方保持auth状态 我不想存储用户电子邮件和密码,而是要存储一个令牌并使用它进行身份验证。但是,尝试使用颁发的令牌和providerId(Firebase)进行身份验证似乎是可行的 同一Firebase项目下的两个应用程序 主应用程序(Firebase ios App1): 扩展应用程序(Firebase ios App2): 上述情况表明

我正在为使用扩展的iOS应用程序创建POC。扩展必须知道用户是否经过身份验证。不幸的是,一个包含应用程序和一个扩展是独立的应用程序,这意味着我必须在某个地方保持auth状态

我不想存储用户电子邮件和密码,而是要存储一个令牌并使用它进行身份验证。但是,尝试使用颁发的令牌providerIdFirebase)进行身份验证似乎是可行的

同一Firebase项目下的两个应用程序

主应用程序(Firebase ios App1)

扩展应用程序(Firebase ios App2)

上述情况表明:

什么是用户零什么是错误:

可选(Error Domain=FIRAuthErrorDomain Code=17999“发生了内部错误,请打印并检查错误详细信息以获取更多信息。”UserInfo={Error\u name=Error\u internal\u Error,NSLocalizedDescription=发生了内部错误,请打印并检查错误详细信息以获取更多信息。NSUnderlyingError=0x600000447290{Error Domain=FIRAuthInternalErrorDomain Code=3“(null)”UserInfo={FIRAuthErrorUserInfoDeserializedResponseKey={ 代码=400; 错误=( { 域=全局; message=“提供程序ID无效:不支持提供程序ID。”; 原因=无效; } ); message=“提供程序ID无效:不支持提供程序ID。”; }}}})


您知道该支持和服务是否有效吗?我有什么地方做错了吗?

您不能使用Firebase ID令牌登录。您可以做的是: 创建接受ID令牌的端点,并验证它:

并返回一个自定义令牌:

然后在扩展名中使用CustomToken登录

但是,这可能会打开一个漏洞,就像一个短暂的ID令牌泄漏一样,攻击者可以通过该端点将其交换为永久会话

如果ID令牌上的
auth\u time
是最近的,则只能返回自定义令牌。这确保最近登录的用户可以将其应用程序与扩展同步

let userDefatuls = UserDefaults(suiteName: "group.test")
userDefatuls?.set(providerId!, forKey: "providerId")
userDefatuls?.set(value!, forKey: "token")
print("Saved value to user defaults \(value!)")
userDefatuls?.synchronize()
let userDefaults = UserDefaults(suiteName: "group.test")
let token = userDefaults?.string(forKey: "token")
let providerId = userDefaults?.string(forKey: "providerId")
print("What is the provider id \(providerId)")
let credential = OAuthProvider.credential(withProviderID: providerId!, accessToken: token!)
Auth.auth().signIn(with: credential) { (user, error) in
    print("********* What is the user \(user) what is the error \(error)")
}