我正在尝试使用 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/XXX
endpoint是用来做什么的,有没有关于使用它的文档?
它主要是为了易于使用和方便。您只需为所有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 -