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

Posted

技术标签:

【中文标题】是否可以使用 id 令牌进行电子邮件身份验证?【英文标题】:Is email authentication using id token possible? 【发布时间】:2018-06-11 12:44:20 【问题描述】:

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

我不想存储用户电子邮件和密码,而是存储令牌并使用它进行身份验证。但是,尝试使用颁发的 tokenproviderId (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 什么是错误:

Optional(Error Domain=FIRAuthErrorDomain Code=17999 "发生内部错误,打印并检查错误详细信息以获取更多信息。" UserInfo=error_name=ERROR_INTERNAL_ERROR, NSLocalizedDescription=发生内部错误,打印并检查错误详细信息以获取更多信息。NSUnderlyingError=0x600000447290 Error Domain=FIRAuthInternalErrorDomain Code=3 "(null)" UserInfo=FIRAuthErrorUserInfoDeserializedResponseKey= 代码 = 400; 错误 = ( 域=全局; message = "INVALID_PROVIDER_ID : 不支持提供者 ID。"; 原因=无效; ); message = "INVALID_PROVIDER_ID : 不支持提供者 ID。"; )

你知道支持和工作吗?是不是我做错了什么?

【问题讨论】:

【参考方案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 是最近的,您只能返回自定义令牌。这可确保最近登录的用户可以将他们的应用与扩展同步。

【讨论】:

以上是关于是否可以使用 id 令牌进行电子邮件身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

DocuSign 集成。是不是可以在未经用户同意的情况下获得身份验证令牌。我想使用我的凭据在内部发送 docusign 信封电子邮件 [关闭]

next() 中间件不适用于令牌身份验证

是否可以使用开放 ID 连接 ID 令牌对 API 进行身份验证

无需身份验证令牌即可访问 Google 电子表格 API

Asp.net 身份电子邮件验证令牌无法识别

在电子邮件密码身份验证中进行额外的自定义检查 (Flutter - Firebase)