提问者:小点点

为什么Firebase auth在返回我的应用程序之前使用“中间件”重定向?


我正在尝试使用 Firebase 身份验证向我的网络应用添加身份验证,我想避免使用 Firebase JS SDK,因为我认为它太大了,也是为了更好地了解底层协议。

我注意到Firebase Auth SDK不会直接重定向到OAuthendpoint,然后再重定向回来。相反,它会重定向到 https://my-app.firebaseapp.com/__/auth/handler 然后重定向到 OAuth endpoint,并将自身作为回调,然后返回到我请求的回调 URL。

所以基本上不是:

myapp.com
   ↓
accounts.google.com/o/oauth2/v2/auth
   ↓
myapp.com

这种情况会发生:

myapp.com
   ↓
myapp.firebaseapp.com/__/auth/handler
   ↓
accounts.google.com/o/oauth2/v2/auth
   ↓
myapp.firebaseapp.com/__/auth/handler
   ↓
www.myapp.com

我在任何地方都找不到关于这个API的任何文档,但我认为它可能是一个用于CSRF预防的内部中间件,或者可能只是一个API,它可以大大缩小不同Federated Identity API之间的差距。

我对此感兴趣的原因是,如果它执行上述任一操作,它可以为我节省一些时间和金钱,而且我很确定我可能会从中学到一些新东西(我至少希望如此)。

那么,https://my-app.firebaseapp.com/__/auth/XXXendpoint是用来做什么的,有没有关于使用它的文档?


共2个答案

匿名用户

它主要是为了易于使用和方便。您只需为所有OAuth提供程序使用一个白名单回调URL(为所有OAauth提供程序设置一个重定向URL)。你不必像Firebase Auth那样担心托管它。现在,您可以将应用程序托管在多个域中用于生产,localhost用于开发等。您可以在项目设置中的一个位置添加和删除白名单域。注意,过去一些OAuth提供程序只允许一个回调URL。这将绕过这一限制。

它也适用于弹出流以及典型的 OAuth 重定向流。例如,许多开发人员选择将弹出流用于桌面,并重定向用于移动设备。

另请注意,对于重定向流,它不会通过 URL 查询字符串将 OAuth 授权代码等传递回您的网页,而是通过 iframe postMessage 进行传递。因此,重定向回原始 URL 将具有完全相同的 URL,未经修改。因此,您可以从 https://www.example.com/#login 开始,然后返回相同的URL以完成登录。

此外,它不需要服务器端代码,而express passport等通常需要服务器端代码。也没有样板代码。

匿名用户

myapp.firebaseapp.com/__/auth/handler 是使用 Firebase 身份验证让用户登录的网址。

accounts.google.com/o/oauth2/v2/auth 网址会让您使用 Google OAuth 登录,但不能使用 Firebase 登录。

对于 Firebase 支持的所有 OAuth2 提供商,此流程都是相同的。因此,如果您使用Facebook登录,您会看到firebase auth handler -