在Firebase中实现自定义身份验证的工作流是什么



首先,我是OAuth和Firebase的新手。我在谷歌上搜索了一些Firebase不支持的社交媒体的OAuth登录,例如LinkedIn和微信。但我所能找到的只是我不完全理解的自定义身份验证。:(

它提到

这种身份验证方法在您已经在管理服务器上的用户帐户、有更高级的身份验证需求或对服务器端工作人员进行身份验证的情况下非常有用。

这是否意味着我必须拥有自己的服务器才能进行身份验证?

如果答案是肯定的,那么涉及移动应用程序、我自己的服务器、Firebase和OAuth授权服务器(例如来自LinkedIn)的身份验证工作流程如何?

是的,您需要一个服务器来进行身份验证。至少需要进行两个不同的API调用:

  1. 使用提供程序通过OAuth对用户进行身份验证。然后,用户将被重定向到您的回调URL。您使用提供程序指定此url。对于LinkedIn,请参阅此页面,他们将回调URL称为可信端点
  2. 一旦用户被重定向到回调URL,您就可以按照Firebase给出的示例生成JSON Web Token(JWT)服务器端(参见本页),即如果您使用的是ruby
require "firebase_token_generator"
payload = {:uid => "1", :auth_data => "foo", :other_auth_data => "bar"}
generator = Firebase::FirebaseTokenGenerator.new("<YOUR_FIREBASE_SECRET>")
token = generator.create_token(payload)

然后,将此token推送给您的用户。就为移动应用程序实现这一点而言,只需在客户端到达回调URL后,将此令牌包含在对客户端的JSON响应中即可。您可能需要使用WebView向提供商验证用户,然后通过重写WebViewClient中的方法shouldInterceptRequest来拦截响应。阅读WebViewClient文档了解更多信息

需要自己的服务器来执行涉及Firebase Secret的操作。不要存储此客户端。事实上,请注意Firebase自定义身份验证页面上的说明:

Firebase JWT应始终在受信任的服务器上生成,以便生成它们所需的Firebase Secret可以保持私有。

有关OAuth的更多信息,请参阅OAuth 2 Simplified,或SO问题在高级层面上,OAuth是如何工作的?

最新更新