Https Rest APIを使用して、郵便配達員やカールからFirebaseデータベースを直接管理したいと考えています。たとえば、postmanとhttps://MY_FIREBASE_DATABSE_URL/users.jsonを使用してユーザーjsonを返す。パブリックアクセスのセキュリティルールを設定した場合Firebase HTTP POSTのauth引数
{
"rules": {
".read": true,
".write": true
}
これは問題なく動作します。
しかし、私は、認可
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
を必要とするセキュリティルールを設定している場合、私は私の知る限り、私は必要な理解として
{ "エラー" は、 "PERMISSION_DENIED"}
を取得auth = SECURITY_TOKENのhttps要求を追加します。 firebaseコンソールからの秘密鍵を使用する - > SECURITY_TOKENのサービスアカウントは機能しませんが、とにかくデータベースの秘密よりも推奨されていません。
ここでは、https://www.firebase.com/docs/rest/guide/user-auth.html#section-rest-server-authenticationというJavaのトークンジェネレータをダウンロードします。
私はMY_DATABASE_SECRETは、上記のfirebaseコンソールから秘密鍵であり、uidが私のFirebaseユーザーからユーザーIDです言及here
としての私のトークン
public void actionPerformed(ActionEvent e) {
String uid = uidField.getText();
boolean admin = adminField.isSelected();
Map<String, Object> authPayload = new HashMap<String, Object>();
authPayload.put("uid", uid);
authPayload.put("some", "arbitrary");
authPayload.put("data", "here");
TokenOptions tokenOptions = new TokenOptions();
tokenOptions.setAdmin(admin);
TokenGenerator tokenGenerator = new TokenGenerator(<MY_DATABASE_SECRET>);
String token = tokenGenerator.createToken(authPayload, tokenOptions);
System.out.println(token);
tokenField.setText(token);
}
を生成するには、次のコードを使用します。このトークンを郵便配達員に使用すると、私は引き続き許可が拒否されます。
あなたがFirebaseのレガシーバージョンのためであるに参照するドキュメントを検索します。プロジェクトは新しいFirebaseコンソールで作成された可能性があります。バージョンを混在させることはできません。新しいバージョンのFirebaseでREST呼び出しを認証する方法については、この回答を参照してください:http://stackoverflow.com/a/37444914/209103 Firebaser Michael Bleigh –
私がその投稿で理解できないこと(そしてそこにはコメントできません)は、「管理アクセスを作成するためにサービスアカウントを直接使用する必要がある」という意味で、node.jsが必要な場合、 Javaとどのように。 –