【问题标题】:Authenticate users via Cloud Functions通过 Cloud Functions 对用户进行身份验证
【发布时间】:2020-06-20 09:02:25
【问题描述】:

我正在尝试使用 firebase 和 cloudfunctions 构建一个 RESTful API,以不依赖于 firebase 客户端 API。 firebase 提供的 ADMIN SDK 极大地扩展了用户管理功能,但我找不到任何通过 REST 调用对用户进行身份验证的方法。

那么,我的可能性是什么?有没有办法使用 firebase 身份验证系统来做到这一点,或者我必须创建一个单独的系统并使用自定义 jwt 令牌对我的用户进行身份验证?

【问题讨论】:

    标签: firebase firebase-authentication google-cloud-functions


    【解决方案1】:

    我不是 100% 肯定理解您的目标,但这里有一些值得深思的地方:

    1. 在 Cloud Function for Firebase 中,您可以使用 Admin SDK 与 Firebase 服务进行交互(即获取 Firestore 或生成存储在 Cloud Storage 中的文件的签名 URL 等)。使用 Admin SDK,您实际上可以完全绕过不同 Firebase 服务的安全规则。
    2. 如果您的 Cloud Function for Firebase 由经过身份验证的用户直接调用,并且您希望在 Cloud Function 中识别调用它的用户,则有两种情况:(a) 它是 Callable Cloud Function:用户信息会自动添加到请求中,请参阅doc。 (b) 这是一个“简单”的HTTP Cloud Function:您会发现here 是一个示例,它显示了如何将其限制为仅在 Firebase Auth 服务中声明的 Firebase 用户。然后,当您知道谁是用户时,您必须自己实施访问控制,因为如上所述,使用 Admin SDK 您可以完全访问所有服务。
    3. 如果您的目标是通过 REST API 调用(独立于 Cloud Functions)对用户进行身份验证,您可以将 Firebase Auth REST API 与 Firebase 身份验证服务结合使用。特别是,您可以调用以下端点:https://firebase.google.com/docs/reference/rest/auth#section-sign-in-email-password。响应包含一个idToken,您可以使用它来调用实现上述第 2b 点中描述的限制的 HTTP 云函数(只需使用以下 HTTP 请求标头调用云函数端点:'Authorization': 'Bearer ' + idToken)。

    【讨论】:

    • 感谢您的解释!如果可能的话,我试图不依赖 firebase 客户端 API。不过,Callables 确实是扩展客户端 API 功能的好选择。我将研究您提供的内容,看来 firebase auth rest api 是我正在寻找的。谢谢!
    【解决方案2】:

    如果你在private mode 中部署你的函数(我的意思是只有经过身份验证和授权的用户才能调用它。为此,你需要一个谷歌签名的身份令牌。我不知道 Firebase 可以做什么,但大多数时间,这是不可能的。

    解决方案是在您的 Cloud Functions 前面使用 Cloud Endpoint。 Cloud Endpoint 支持 Firebase auth 身份验证,Cloud Endpoint 可以托管兼容的 OAuth2 身份(GCP 上的命名服务帐号)。

    wrote an article to secure serverless product with API Keys。您只需更改security definition into firebase auth,它应该可以工作。

    【讨论】:

    • 谢谢,纪尧姆!确实,这是一篇很棒的文章,可以根据我的情况进行改编!
    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 2020-03-20
    • 2017-07-03
    • 2014-10-30
    • 2019-09-18
    • 1970-01-01
    • 2017-09-18
    • 2019-12-26
    相关资源
    最近更新 更多