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

What is the workflow to implement the custom authentication in Firebase?

首先,我是 OAuth 和 Firebase 的新手。我在谷歌上搜索了一下,找到了 Firebase 未正式支持的社交媒体的 OAuth 登录,例如。领英和微信。但我能找到的只是 Custom Authentication 我不完全理解。 :(

它提到

This method of authentication is useful in cases where you are already managing user accounts on your server, where you have more advanced authentication needs, or for authenticating server-side workers.

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

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

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

  1. 通过提供者的 OAuth 对用户进行身份验证。然后用户将被重定向到您的回调 URL。您向提供商指定此 url。对于 LinkedIn,请参阅 this 页面,他们将回调 URL 称为 可信端点
  2. 一旦用户被重定向到回调 URL,您将按照 Firebase 给出的示例生成 JSON Web 令牌 (JWT) 服务器端(参见 this 页) ,即如果您使用 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 JWTs should always be generated on a trusted server so that the Firebase Secret which is needed to generate them can be kept private.

有关 OAuth 的更多信息,请参阅 OAuth 2 Simplified, or the SO question On a high level, how does OAuth 2 work?