web-dev-qa-db-ja.com

HTTP / RESTエラー403 Forbidden経由でFireBaseデータベースにアクセスできません

Swift + Vapor framework for server + Xcode 8.1

Firebase Realtime Databaseを読み取ってDBにHTTPリクエストを送信しようとしていますが、権限が拒否されました。

これらはステップです:
1。 「console.developers.google.com」からダウンロードした秘密鍵でJWT署名を作成します
2。 POSTリクエストをOAuth2サーバーに送信し、アクセストークンを取得する
3。 OAuth2サーバーから受信したアクセストークンを使用して、GETリクエストをFirebaseデータベースに送信します。

「Permission denied」、HTTP/1.1 403 Forbiddenが表示される

// the header of the JSON Web Token (first part of the JWT)
let headerJWT = ["alg":"RS256","typ":"JWT"]

// the claim set of the JSON Web Token
let jwtClaimSet =
  ["iss":"[email protected]",
 "scope":"https://www.googleapis.com/auth/firebase.database", //is this the correct API to access firebase database?
 "aud":"https://www.googleapis.com/oauth2/v4/token",
 "exp": expDate,
 "iat": iatDate]


drop.get("access") { request in
var accesstoken = "ya29.ElqhA-....XXXX"

 let responseFirebase = try drop.client.get("https://fir- 30c9e.firebaseio.com/data/Users.json",
  headers: ["Authorization":"Bearer \(accesstoken)"], 
     query: [:])

print("FirebaseResponse_is \(responseFirebase)")
return "success"
}

Firebase Service AccountFireBase Database Rulles

14
bibscy

scopeキーに値がありませんhttps://www.googleapis.com/auth/userinfo.email

 let jwtClaimSet =
   ["iss":"[email protected]",
 "scope": "https://www.googleapis.com/auth/firebase.database  
 https://www.googleapis.com/auth/userinfo.email", 
 "aud":"https://www.googleapis.com/oauth2/v4/token",
 "exp": expDate,
 "iat": iatDate]

私は答えを見つけました ここでグーグルグループを閲覧

5
bibscy

TLDR;auth=<TOKEN>は、認証ヘッダーを使用する代わりにクエリ文字列で使用します。


Firebaseのドキュメントでは、これがどのように機能するかについては不明です。ドキュメントによると、うまくいくはずの3つの方法があります。

  1. auth=<TOKEN>クエリ文字列内( リンク
  2. access_token=<TOKEN>クエリ文字列内( リンク
  3. Authorization: Bearer <TOKEN>リクエストヘッダー内( リンク

しかし、3つの方法すべてが実際に機能するとは確信していません。私のアプリケーションでは方法1を使用しているので、1つは確実に機能します。

7
nloewen
headers: ["Authorization":"Authorization: Bearer \(accesstoken)"],

する必要があります

headers: ["Authorization":"Bearer \(accesstoken)"],
0
Nikola.Lukovic