15

Swift + サーバー用の Vapor フレームワーク + Xcode 8.1

DB への HTTP リクエストを作成する Firebase Realtime Database を読み込もうとしていますが、許可が拒否されます。

手順は次のとおり
です。 1. 「console.developers.google.com」からダウンロードした秘密鍵で署名する JWT を作成します
2. OAuth2 サーバーに POST リクエストを送信し、アクセス トークンを取得します
3. から受け取ったアクセス トークンを使用して、firebase データベースに GET リクエストを送信しますOAuth2 サーバー。

「許可が拒否されました」、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":"firebase-adminsdk-kxx5h@fir-30c9e.iam.gserviceaccount.com",
 "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 サービス アカウント FireBase データベース ルール

4

3 に答える 3

7

TLDR; auth=<TOKEN>認証ヘッダーを使用する代わりに、クエリ文字列に配置してみてください。


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

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

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

于 2016-11-26T19:30:01.287 に答える
0
headers: ["Authorization":"Authorization: Bearer \(accesstoken)"],

する必要があります

headers: ["Authorization":"Bearer \(accesstoken)"],
于 2016-11-25T17:50:04.367 に答える