ユーザーの助けを借りて、いくつかのルールによって保護されている一部のデータに対してレストコールを実行したいので、リクエストに対するトークンが必要です。古いバージョンと非推奨の方法( 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を使用して生成された場合でも、新しい方法は機能しません。非推奨の方法のみが機能している理由を誰かが知っていますか?リクエストのヘッダーにトークンを入れたいと思っていましたが、できません。
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
ヘッダーにaccess_tokenを入れる必要があります。
ヘッダー名:承認
ヘッダーの内容:ベアラーthe_token
試してみて、いくつかのヘッダーを配置するには、postman for google chromeまたは他のツールを使用します。
このような:
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は、アカウントで生成できるサービス管理者アカウント情報です