web-dev-qa-db-ja.com

Firebaseで残りの通話を認証するにはどうすればよいですか?

ユーザーの助けを借りて、いくつかのルールによって保護されている一部のデータに対してレストコールを実行したいので、リクエストに対するトークンが必要です。古いバージョンと非推奨の方法( https://www.firebase.com/docs/rest/api/ ):Firebaseドキュメントのバージョンによって異なる方法があります。

'https://samplechat.firebaseio-demo.com/users/jack/name.json?auth=<TOKEN>'

新しい方法と私はドキュメントを引用しています( https://firebase.google.com/docs/reference/rest/database/user-auth#section-get ):

アクセストークンの使用データベースREST APIは、クエリ文字列またはヘッダーでaccess_token =を受け入れますAuthenticate:Bearerは、サービスアカウントでリクエストを認証します。

'https://samplechat.firebaseio-demo.com/users/jack/name.json?access_token=<TOKEN>'

新しいFirebaseコンソールを使用して設定した場合でも、使用しているトークンが新しいFirebase SDKを使用して生成された場合でも、新しい方法は機能しません。非推奨の方法のみが機能している理由を誰かが知っていますか?リクエストのヘッダーにトークンを入れたいと思っていましたが、できません。

16
drevlav

Javaの場合:authを使用してDatabaseRealtimeにアクセスしようとしました。実行:

curl 'https://PROJECT_ID.firebaseio.com/users.json?auth=DATABASE_SECRET'

機能しましたが、この方法は非推奨です。
その後、access_tokenを使用しようとしました。Firebaseプロジェクトでaccess_tokenを使用してデータベースをクエリすると問題が発生しました。以前に遭遇したバグの根本的な原因はすでに判明しています。 access_tokenが正しく生成されないため。access_tokenをもう一度生成しようとしましたが、次のようにaccess_tokenを使用しようとしました:

1。 google-api-clientをpom.xmlに追加します

<dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.22.0</version>
    </dependency>

2。トークンを取得

 public static void main(String[] args) throws Exception {
           GoogleCredential googleCred = GoogleCredential.fromStream(new 
           FileInputStream("C://realtime.json"));
           GoogleCredential scoped = googleCred.createScoped(
                         Arrays.asList(
       // or use firebase.database.readonly for read-only access
           "https://www.googleapis.com/auth/firebase.database",                           
    "https://www.googleapis.com/auth/userinfo.email"
                          )
                  );
                  scoped.refreshToken();
                  String token = scoped.getAccessToken();
                  System.out.println(token);
              }

3。データベースへのアクセスを試みます上記で出力された値をコピーします
curlを実行します。

curl 'https://PROJECT_ID.firebaseio.com/users.json?access_token=TOKEN'

うまくいきました。

詳細については、リンクを参照してください: https://firebase.google.com/docs/reference/rest/database/user-auth#section-get

2
Mr Special

ヘッダーにaccess_tokenを入れる必要があります。

ヘッダー名:承認

ヘッダーの内容:ベアラーthe_token

試してみて、いくつかのヘッダーを配置するには、postman for google chromeまたは他のツールを使用します。

1
EmCode

このような:

 try (InputStream is = new ClassPathResource("your-admin-info.json").getInputStream()) {

      GoogleCredential googleCred = GoogleCredential.fromStream(is);
      scoped = googleCred.createScoped(
          Arrays.asList(
              "https://www.googleapis.com/auth/firebase.database",
              "https://www.googleapis.com/auth/userinfo.email"
          )
      );
      scoped.refreshToken();
      scoped.getAccessToken();

your-admin-info.jsonは、アカウントで生成できるサービス管理者アカウント情報です

0
Alexis