使用邮件和密码通过REST API [Firebase]进行身份验证

End*_*eit 49 rest android firebase firebase-authentication

我想知道是否有可能实际验证的火力地堡REST API withouth的使用自定义的认证

我已经与Firebase合作了一段时间,我现在正在考虑将我的后端迁移到Firebase.使用后端的应用程序当前使用REST API,根本不需要实时数据.因此,我只想在客户端上使用REST API而不是完整的Android框架.

是否可以通过HTTP请求使用Firebase的邮件和密码身份验证来获取身份验证令牌?

旧文档中,我只找到了自定义登录的解决方案,在新文档中,您似乎需要一个Google服务帐户.

任何帮助或建议表示赞赏.

nlo*_*wen 61

更新:现在记录Firebase REST身份验证!

查看文档


Firebase REST身份验证

我想通过检查Javascript API发送的请求,了解如何为Firebase执行电子邮件和密码身份验证.

这些API未记录且不受支持


Firebase 3

Firebase 3身份验证是Google Identity Toolkit的更新和重命名版本.旧文档不完全准确,但可能是有用的,可以在这里找到:https://developers.google.com/identity/toolkit/web/reference/

Firebase 3要求所有请求都包含Content-Type: application/json在标头中

API密钥

Firebase 3需要将API密钥附加到所有身份验证请求.您可以访问Firebase项目概述并单击"将Firebase添加到您的Web应用程序",找到数据库的API密钥.您应该看到一个包含如下代码的窗口:

<script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js">    </script>
<script>
  // Initialize Firebase
  var config = {
    apiKey: "<my-firebase-api-key>",
    authDomain: "my-firebase.firebaseapp.com",
    databaseURL: "https://my-firebase.firebaseio.com",
    storageBucket: "my-firebase.appspot.com",
  };
  firebase.initializeApp(config);
</script>
Run Code Online (Sandbox Code Playgroud)

复制apiKey值并保存以供日后使用.

注册

方法: POST

网址: https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=<my-firebase-api-key>

有效载荷:

{
    email: "<email>",
    password: "<password>",
    returnSecureToken: true
}
Run Code Online (Sandbox Code Playgroud)

响应:

{
    "kind": "identitytoolkit#SignupNewUserResponse",
    "localId": "<firebase-user-id>", // Use this to uniquely identify users
    "email": "<email>",
    "displayName": "",
    "idToken": "<provider-id-token>", // Use this as the auth token in database requests
    "registered": true,
    "refreshToken": "<refresh-token>",
    "expiresIn": "3600"
}
Run Code Online (Sandbox Code Playgroud)

登录

方法: POST

网址: https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=<my-firebase-api-key>

有效载荷:

{
    email: "<email>",
    password: "<password>",
    returnSecureToken: true
}
Run Code Online (Sandbox Code Playgroud)

响应:

{
    "kind": "identitytoolkit#VerifyPasswordResponse",
    "localId": "<firebase-user-id>", // Use this to uniquely identify users
    "email": "<email>",
    "displayName": "",
    "idToken": "<provider-id-token>", // Use this as the auth token in database requests
    "registered": true,
    "refreshToken": "<refresh-token>",
    "expiresIn": "3600"
}
Run Code Online (Sandbox Code Playgroud)

获取帐户信息

方法: POST

网址: https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key=<my-firebase-api-key>

有效载荷:

{
    idToken: "<provider-id-token>"
}
Run Code Online (Sandbox Code Playgroud)

响应:

{
    "kind": "identitytoolkit#GetAccountInfoResponse",
    "users": [
    {
        "localId": "<firebase-user-id>",
        "email": "<email>",
        "emailVerified": false,
        "providerUserInfo": [
        {
            "providerId": "<password>",
            "federatedId": "<email>",
            "email": "<email>",
            "rawId": "<email>"
        }],
        "passwordHash": "<hash>",
        "passwordUpdatedAt": 1.465327109E12,
        "validSince": "1465327108",
        "createdAt": "1465327108000"
    }]
}
Run Code Online (Sandbox Code Playgroud)

Firebase 2

这些请求返回Firebase文档中描述的JSON数据.https://www.firebase.com/docs/web/guide/login/password.html#section-logging-in

登录

您可以通过发送具有以下格式的GET请求进行身份验证:

https://auth.firebase.com/v2/<db_name>/auth/password?&email=<email>&password=<password>
Run Code Online (Sandbox Code Playgroud)

注册

还可以通过_method=POST作为查询字符串的一部分发送相同的GET请求来执行用户创建

https://auth.firebase.com/v2/<db_name>/users?&email=<email>&password=<password>&_method=POST
Run Code Online (Sandbox Code Playgroud)

  • 不受支持且可能随时更改,因为这些是内部API端点. (5认同)
  • @makkasi他们可能不会改变,因为破坏导致SDK的旧版本中断. (3认同)
  • 现在这是官方的,并在此处记录:https://firebase.google.com/docs/reference/rest/auth/#section-sign-in-email-password (3认同)
  • @Endzeit我已经用Firebase 3的REST身份验证信息更新了我的答案.这不是一个完整的身份验证操作列表,但应该让你开始:)如果你计算出其他操作的格式,请回来让我们知道! (2认同)
  • 我能够获取我的idToken/accessToken,但我不知道如何使用它来访问我的数据库.当我尝试访问<database-url> .json?access_token = <access-token>时,我获得了权限被拒绝 (2认同)

Che*_*byr 5

从 Firebase 指南中使用自定义身份验证系统在网站上使用 Firebase 进行身份验证(请参阅https://firebase.google.com/docs/auth/web/custom-auth

您可以通过修改您的身份验证服务器以在用户成功登录时生成自定义签名令牌来将 Firebase 身份验证与自定义身份验证系统集成。您的应用收到此令牌并使用它来对 Firebase 进行身份验证。

这是关键思想:

1) 将 Firebase 添加到您的 Web 项目并使用 Firebase REST JavaScript SDK 进行身份验证,并使用 Firebase 访问存储/实时数据库。

  // TODO: Replace with your project's customized code snippet
  <script src="https://www.gstatic.com/firebasejs/3.0.2/firebase.js"></script>
  <script>
    // Initialize Firebase
    var config = {
      apiKey: '<your-api-key>',
      authDomain: '<your-auth-domain>',
      databaseURL: '<your-database-url>',
      storageBucket: '<your-storage-bucket>'
    };
    firebase.initializeApp(config);
  </script>
Run Code Online (Sandbox Code Playgroud)

2) 您的应用程序用户使用他们的用户名和密码登录到您的身份验证服务器。您的服务器会检查凭据并在它们有效时返回自定义令牌。

3) 从认证服务器收到自定义令牌后,将其传递给 signInWithCustomToken 以登录用户

firebase.auth().signInWithCustomToken(token).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});
Run Code Online (Sandbox Code Playgroud)