No se puede acceder a la base de datos de FireBase a través del error HTTP / REST 403 Prohibido

Marco Swift + Vapor para servidor + Xcode 8.1

Intento leer Firebase Realtime Database haciendo solicitudes HTTP a mi base de datos, pero obtengo permiso denegado.

Estos son los pasos:
1. crear JWT, firmarlo con la clave secreta descargada de “console.developers.google.com”
2. envíe la solicitud POST al servidor OAuth2 y obtenga el token de acceso
3. Enviar solicitud GET a la base de datos de firebase con token de acceso recibido del servidor OAuth2.

Obtengo “Permiso denegado”, HTTP / 1.1 403 Prohibido

// 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" } 

Cuenta de servicio de Firebase Base de datos de Firebase Rulles

TLDR; Intente colocar auth= en su cadena de consulta en lugar de usar el encabezado de autorización.


La documentación de Firebase no está clara de cómo funciona esto. De acuerdo con la documentación, existen tres métodos que deberían funcionar.

  1. auth= en la cadena de consulta ( enlace )
  2. access_token= en la cadena de consulta ( enlace )
  3. Authorization: Bearer en el encabezado de solicitud ( enlace )

Sin embargo, no estoy convencido de que los tres métodos realmente funcionen. Estoy usando el método 1 en mi aplicación, así que sé que uno funciona con seguridad.

La clave de scope carecía de valor https://www.googleapis.com/auth/userinfo.email

  let jwtClaimSet = ["iss":"firebase-adminsdk-kxx5h@fir-30c9e.iam.gserviceaccount.com", "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] 

Encontré la respuesta para explorar grupos de google aquí

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

debiera ser

 headers: ["Authorization":"Bearer \(accesstoken)"], 
Intereting Posts