Aks*_*wat 8 firebase firebase-authentication
我正在迁移到新的数据库和3.0客户端库.我正在更新生成自定义身份验证令牌的部分(在我们的服务器上),以执行PATCH更新Firebase数据库中的资源.
这些PATCH请求过去由我们的服务器使用Firebase使用admin基于此的声明:https://www.firebase.com/docs/rest/guide/user-auth.htm
对于新的DB,我正在生成JWT令牌(使用ruby-jwt),如下所示:
payload = {
aud: "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
claims: custom_claims.merge({ admin: true }),
exp: now_seconds + (60 * 60), # Maximum expiration time is one hour
iat: now_seconds,
iss: service_account_email,
sub: service_account_email,
uid: uid
}
JWT.encode(payload, private_key, "RS256")
Run Code Online (Sandbox Code Playgroud)
一个PATCH与此标记的火力地堡DB请求失败:Missing claim 'kid' in auth header.
Mic*_*igh 15
在新的Firebase中,您需要直接使用服务帐户来创建管理访问凭据.这是一个Node.js片段,显示如何对数据库进行REST调用:
// key.json is a service account key downloaded from the Firebase Console
var key = require('./key.json');
var google = require('googleapis');
var request = require('request');
var DATABASE_URL = 'https://<databaseName>.firebaseio.com';
var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/firebase.database'
]);
jwtClient.authorize(function(err, tokens) {
request({
url: DATABASE_URL + '/.json',
method: 'GET',
headers: {
'Authorization': 'Bearer ' + tokens.access_token
}
}, function(err, resp) {
console.log(resp.body);
});
});
Run Code Online (Sandbox Code Playgroud)
要在Ruby中执行相同操作,您可以查看googleauth gem以使用服务帐户凭据获取访问令牌.
小智 1
以下是 Michael Bleigh 使用 ruby googleauth 模块的答案:
require 'googleauth'
scopes = [ 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/firebase.database']
auth = ::Google::Auth.get_application_default(scopes)
auth_client = auth.dup
auth_client.sub = "service-account-email-here@yourapp.iam.gserviceaccount.com"
token = auth_client.fetch_access_token!
Run Code Online (Sandbox Code Playgroud)
您还需要将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为服务帐户 JSON 文件的路径。的值auth_client.sub来自client_email此 JSON 文件。
当然,如上所述,这仅在您控制的服务器应用程序中有效。
此外,向 firebase REST API 发出请求对于读者来说仍然是一项练习。
参考
| 归档时间: |
|
| 查看次数: |
7465 次 |
| 最近记录: |