是否可以使用 id 令牌进行电子邮件身份验证?
Posted
技术标签:
【中文标题】是否可以使用 id 令牌进行电子邮件身份验证?【英文标题】:Is email authentication using id token possible? 【发布时间】:2018-06-11 12:44:20 【问题描述】:我正在为使用扩展的 ios 应用程序创建 POC。扩展必须知道用户是否经过身份验证。不幸的是,包含应用程序和扩展程序是独立的应用程序,这意味着我必须在某处保留身份验证状态。
我不想存储用户电子邮件和密码,而是存储令牌并使用它进行身份验证。但是,尝试使用颁发的 token 和 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 什么是错误:
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 信封电子邮件 [关闭]