geo*_*oot 12 node.js web firebase firebase-authentication
我在我的网站上使用 firebase 进行身份验证,并且我想让用户身份验证会话跨子域保持活动状态。
不幸的是,firebase 使用本地存储来存储用户的会话。不幸的是,它独立于每个子域。
我已经知道您可以从服务器端使用 firebase 生成 JWT 令牌,但是它不允许用户退出站点,因为用户最终仍会登录其他子域。
Joh*_*ohn 11
在花了更长的时间之后,我打算跨子域进行单点登录,我写了一篇博客文章,详细介绍了如何实现这一点。
我们在不同的领域有三个应用程序。
accounts.domain.comapp1.domain.comapp2.domain.com我们有三个 Firebase 函数
...cloudfunctions.net/users-signin...cloudfunctions.net/users-checkAuthStatus...cloudfunctions.net/users-signout为了登录:
accounts.domain.com应用程序/users-signin云函数,该函数验证信息,如果有效,则设置__session包含用户 UID的签名cookie,并向客户端返回成功指示。/users-checkAuthStatus云函数,该函数查找签名的__sessioncookie,提取用户 UID,并使用 UID 和 firebase-admin SDK 生成自定义身份验证令牌,并将其返回给客户端。app1.domain.com,该应用程序首先检查此人是否已使用 firebase javascript SDK 登录。
/users-checkAuthStatus云函数,该函数查找签名的__sessioncookie,如果__session找到有效的cookie,则将自定义身份验证令牌返回给客户端。
同样,这是一个高级概述,它忽略了跨站点脚本攻击、实际退出等问题。有关更多信息,请查看博客文章。
这是对的。Firebase 仅支持单主机原始会话。Firebase Auth 正在研究支持 cookie。目前没有简单的解决方案。请随时在 Firebase 论坛上申请此功能:https ://groups.google.com/forum/#!forum/firebase-talk
现在,如果您真的需要这个,这里有一个相对简单的选择:创建一个端点,它接受一个 Firebase ID 令牌并基本上为其底层用户返回一个自定义令牌(您需要使用 Admin SDK 来执行此操作,您验证然后是 ID 令牌,获取用户 UID,然后创建自定义令牌)。用户登录的子域会将 ID 令牌传递给用户仍未通过身份验证的其他子域(您可以使用 iframe 跨源 postMessage 传递它,或者将该 ID 令牌保存在 *.domain.com 策略中) . 然后,自定义令牌可用于使用自定义令牌进行 signInWithCustomToken,从而有效地在此页面上登录同一用户。
虽然这是有风险的,因为端点可能会暴露一个漏洞(它将短期令牌转换为无限期令牌)。如果 ID 令牌被泄露,攻击者基本上可以作为利用此端点的用户登录。
Firebase 现在似乎支持内置 cookie,因此您应该能够按照这个新指南跨子域使用它:
https://firebase.google.com/docs/auth/admin/manage-cookies
| 归档时间: |
|
| 查看次数: |
4916 次 |
| 最近记录: |