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

时间:2018-01-01 14:07:35

标签: firebase firebase-authentication

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

我不想存储用户电子邮件和密码,而是存储令牌并使用它进行身份验证。但是,尝试使用已发布的令牌 providerId Firebase )进行身份验证似乎确实有效。

同一个Firebase项目下的两个应用。

主要应用(Firebase ios App1)

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()

扩展应用(Firebase ios App2)

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)")
}

以上呈现:

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

  

可选(错误域= FIRAuthErrorDomain代码= 17999“发生内部错误,打印并检查错误详细信息以获取更多信息。”UserInfo = {error_name = ERROR_INTERNAL_ERROR,NSLocalizedDescription =发生内部错误,打印并检查错误有关详细信息的详细信息。,NSUnderlyingError = 0x600000447290 {Error Domain = FIRAuthInternalErrorDomain Code = 3“(null)”UserInfo = {FIRAuthErrorUserInfoDeserializedResponseKey = {       代码= 400;       错误=(                   {               domain = global;               message =“INVALID_PROVIDER_ID:不支持提供者ID。”;               reason =无效;           }       );       message =“INVALID_PROVIDER_ID:不支持提供者ID。”;       }}}})

你知道支持和工作吗?有什么我做错的吗?

1 个答案:

答案 0 :(得分:1)

您无法使用Firebase ID令牌登录。你能做的是: 创建一个带有ID令牌的端点,验证它: https://firebase.google.com/docs/auth/admin/verify-id-tokens

并返回自定义标记: https://firebase.google.com/docs/auth/admin/create-custom-tokens

然后在扩展名中签名加入自定义。

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

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

相关问题