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

时间:2018-12-31 18:58:21

标签: firebase oauth-2.0 firebase-authentication

我正在尝试通过使用Firebase Auth将身份验证添加到我的Web应用程序中,并且我想避免使用Firebase JS SDK,因为它在我看来太大了,并且还可以作为一种练习来更好地了解基础协议

我注意到Firebase Auth SDK不会直接重定向到OAuth端点,然后再重定向。相反,它将重定向到https://my-app.firebaseapp.com/__/auth/handler,然后将其自身作为回调重定向到OAuth端点,然后再返回到我请求的回调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之间差距的API。

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

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

2 个答案:

答案 0 :(得分:1)

主要是为了易于使用和方便。您只需为所有OAuth提供程序使用一个列入白名单的回调URL(为所有OAuth提供程序仅设置一个重定向URL)。您不必担心托管它,因为Firebase Auth会为您做到这一点。现在,您可以将应用程序托管在用于生产的多个域中,将主机托管在用于开发的本地域中,等等。只要在您的项目中将它们列入白名单,就可以使用您选择的任何OAuth提供程序登录。您可以在项目设置中的一个位置添加和删除列入白名单的域。请注意,过去某些OAuth提供程序曾经只允许使用一个回调URL。这样会绕过该限制。

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

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

此外,它不需要服务器端代码,通常不需要特快通行证等。也不需要样板代码。

答案 1 :(得分:0)

target_link_libraries(KFilter Eigen3::Eigen)是使用Firebase身份验证登录用户的URL。

myapp.firebaseapp.com/__/auth/handler URL使用Google OAuth登录,而不使用Firebase登录。

对于Firebase支持的所有OAuth2提供程序,此流程相同。因此,如果您使用Facebook登录,则会看到accounts.google.com/o/oauth2/v2/auth