通过检查Javascript API发送的请求,我发现了如何为Firebase执行电子邮件和密码身份验证。
这些API未记录并且不受支持
Firebase 3身份验证是Google Identity Toolkit的更新和重命名版本。旧的文档不完全准确,但可能会有用,并且可以在此处找到:https://developers.google.com/identity/toolkit/web/reference/
Firebase 3要求所有请求在标头中具有Content-Type: application/json
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>
复制apiKey的值并保存以备后用。
方法:POST
网址:https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=<my-firebase-api-key>
有效载荷:
{
email: "<email>",
password: "<password>",
returnSecureToken: true
}
响应:
{
"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"
}
请求方式: POST
URL: https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=<my-firebase-api-key>
负载:
{
email: "<email>",
password: "<password>",
returnSecureToken: true
}
响应:
{
"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"
}
方法: POST
网址:https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key=<我的Firebase API密钥>
负载:
{
idToken: "<provider-id-token>"
}
响应:
{
"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"
}]
}
这些请求返回的是 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>
用户创建也可以通过发送带有查询字符串 _method=POST
的相同 GET 请求来执行。
https://auth.firebase.com/v2/<db_name>/users?&email=<email>&password=<password>&_method=POST
来自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>
2) 您的应用程序用户使用用户名和密码登录您的身份验证服务器。如果凭据有效,您的服务器将返回自定义令牌。
3) 在从身份验证服务器接收到自定义令牌后,将其传递给signInWithCustomToken以登录用户。
firebase.auth().signInWithCustomToken(token).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
一旦您通过电子邮件和密码进行身份验证,您需要返回一个令牌。根据文档,您可以使用getToken(opt_forceRefresh)
返回用户的令牌,此功能位于以下URL。
https://firebase.google.com/docs/reference/js/firebase.User#getToken
我相信你可以做以下其中之一:
将你的 Web 应用连接到 Firebase,你的 REST API 将通过接收用户凭据来处理身份验证,然后通过 Web APIs 密码认证 与 Firebase 进行身份验证。
使用 Firebase 服务器 SDK 生成 自定义身份验证令牌,该令牌将是一个 JSON Web Token (JWT)。
还有一些在 GitHub 上生成 Firebase 令牌的项目: