Postmanを使用してREST firebaseへのAPI呼び出しを実行しようとしています。セキュリティルールが許可されていないユーザーを含むすべてのユーザーを許可する場合にfirebaseから読み取ることができました。
しかし、このルールを使用する場合:
{"rules":{".read": "auth != null", ".write": "auth != null"}}
私は「エラー」を受け取ります:「許可は拒否されました」郵便配達人から。 GoogleのWeb oauth2.0クライアントのリクエストトークンを実行し、authorization_codeトークンを取得しました。
私はURLとヘッダーでトークンを使用しようとしましたが、GET&POST requestでそれを試しても拒否されました。
助けてください。前もって感謝します
上記の答えはうまくいきませんでした。
私のために働いたのは
プロジェクト設定(左上隅のギア)-> サービスアカウント(右端のタブ)-> データベースシークレット(左メニュー)->下にスクロール、bulltetsにカーソルを合わせてShowをクリックします
これを認証キーとして使用します。つまり、.../mycollection.json?auth=HERE
私にとっては、このように機能しました:
https://your-database-url/users.json?auth = YOUR_AUTH_KEY
このAUTH_KEYはどこで入手できますか?
このキーはProject Settings -> Database -> Secret Key
このようなものを試してください
https://your-database-url/users.json?auth=YOUR_AUTH_KEY
応答はUSERSノードのJSONです
認証の作成を支援するPostman事前要求スクリプト:Bearer JWTを作成しました。 Firebase Authを使用してAPIをテストするときに、コピーペーストの多くを保存する必要があります。 https://Gist.github.com/moneal/af2d988a770c3957df11e3360af62635
投稿時のスクリプトのコピー:
/**
* This script expects the global variables 'refresh_token' and 'firebase_api_key' to be set. 'firebase_api_key' can be found
* in the Firebase console under project settings then 'Web API Key'.
* 'refresh_token' as to be gathered from watching the network requests to https://securetoken.googleapis.com/v1/token from
* your Firebase app, look for the formdata values
*
* If all the data is found it makes a request to get a new token and sets a 'auth_jwt' environment variable and updates the
* global 'refresh_token'.
*
* Requests that need authentication should have a header with a key of 'Authentication' and value of '{{auth_jwt}}'
*
* Currently the nested assertions silently fail, I don't know why.
*/
pm.expect(pm.globals.has('refresh_token')).to.be.true;
pm.expect(pm.globals.has('firebase_api_key')).to.be.true;
var sdk = require('postman-collection'),
tokenRequest = new sdk.Request({
url: 'https://securetoken.googleapis.com/v1/token',
method: 'POST',
body: {
mode: 'urlencoded',
urlencoded: [{
type: 'text',
key: 'key',
value: pm.globals.get('firebase_api_key')
},
{
type: 'text',
key: 'grant_type',
value: 'refresh_token'
},
{
type: 'text',
key: 'refresh_token',
value: pm.globals.get('refresh_token')
},
]
}
});
pm.sendRequest(tokenRequest, function(err, response) {
pm.test('request for access token was ok', function() {
pm.expect(response).to.be.ok();
});
const json = response.json();
pm.expect(json).to.an('object');
pm.test('response json has needed properties', function() {
pm.expect(json).to.have.own.property('access_token');
pm.expect(json).to.have.own.property('token_type');
pm.expect(json).to.have.own.property('refresh_token');
const accessToken = json.access_token;
const tokenType = json.token_type;
const refreshToken = json.refresh_token;
pm.environment.set('auth_jwt', tokenType + ' ' + accessToken);
pm.globals.set('refresh_token', refreshToken);
});
});
Postmanを介してデータを取得するのは非常に簡単です。
1 DB URL
https://YOUR_PROJECT_URL.firebaseio.com/YOUR_STRUCTURE/CLASS.json
2 authとしてヘッダーにAPIキーを追加
auth = API_KEYの値
例:
注:ここにリストされているすべてのオプションとしてこの回答を追加することは、非推奨または機能しない(主に手順が欠落しているため)。
Postmanで動作させる最良の方法は、 Google OAuth2アクセストークン を使用することです。提供されたリンクは完全な長さで説明されていますが、簡単な手順を追加しました。
implementation 'com.google.api-client:google-api-client:1.25.0'
OR
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.25.0</version>
</dependency>
// Load the service account key JSON file
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
GoogleCredential scoped = GoogleCredential
.fromStream(serviceAccount)
.createScoped(
Arrays.asList(
"https://www.googleapis.com/auth/firebase.database",
"https://www.googleapis.com/auth/userinfo.email"
)
);
// Use the Google credential to generate an access token
scoped.refreshToken();
String token = scoped.getAccessToken();
System.out.println(token);