2012-12-28 3 views
2

PHP cURL을 통해 간단한 읽기를 시도합니다. 내 보안 규칙에 따라 모든 사용자가 내 정보를 읽을 수 있으면 내 데이터를 읽을 수 있습니다.Firebase REST API를 통해 데이터 가져 오기 PHP CURL

{ 
    "rules": { 
    ".read": true, 
    ".write": true 
    } 
} 

그러나 특정 사용자 이름으로 읽기/쓰기를 제한하는 경우

권한이 없습니다.

코드는 다음과 같다 ...


require('JWT.php'); 
$secret = 'MY_FIREBASE_SECRET'; 
$data = array('username' => 'admin'); 
$token = JWT::encode($data, $secret); 

$url = "https://MY_FIREBASE.firebaseio.com/messages.json?auth=$token"; 
$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => $url 
)); 
$response = curl_exec($curl); 
그 난 그냥 성공적으로 데이터를 읽을 수 있어요 URL에 토큰 대신 내 FB의 비밀을 사용하는 경우, 주목할 가치 (인증 = $ secret). 또한 Forge 시뮬레이터에서 "맞춤 인증"을 사용하여 데이터 읽기를 성공적으로 테스트했습니다. { '사용자 이름': '관리자'}

나는 PHP JWT 라이브러리를 사용하고 있습니다 : 내 컬 호출이 올바르지 않거나 난을 구성하고 있지 않다 때문에 거부 허가를 받고 있어요 경우 https://github.com/luciferous/jwt/blob/master/JWT.php

확실하지 않음을 토큰. 나는 cURL을 통해 POST와 GET을 시도했지만 동일한 결과를 얻고있다.

어떤 제안이 많이 주시면 감사하겠습니다 ... 슈퍼 빠른 응답 앤드류에 대한


감사합니다. 나는 너의 제안을 시도했다. 불행히도, 나는 여전히 '허가 거부'를 받고 있습니다. 여기 내 업데이트 된 코드 ...

require('JWT.php'); 
$secret = 'my-secret'; 
$user = array('v' => 0, 'iat' => time(), 'd' => array('username' => 'admin', 'type' => 'admin', 'fullname' => 'Administrator')); 
$token = JWT::encode($user, $secret); 
$curl = curl_init(); 
$url = "https://myfirebase.firebaseio.com/messages.json?auth=$token"; 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => $url 
)); 
$response = curl_exec($curl); 
curl_close($curl); 
  • 내가 우리의 데이터에 대한 .read 규칙을 변경하여이 작업을 얻었 는가! "정식 = null가"-하지만 그에게 매우 안전한하지 않는 것 ...

우리의 데이터 구조는 단순히 BTW

+ myfirebase 
      + messages 
         - 000001 = "this is the 1st test message" 
         - 000002 = "this is the 2nd test message" 

입니다 참고 : 우리의 응용 프로그램은 한 사용자가됩니다 데이터 읽기/쓰기. 토큰을 가져올 수없는 경우 ... URL에 비밀 키를 전달하지 않고 REST API를 통해 호출을 인증하는 더 좋은 방법이 있습니까? 예 : & auth = 'my-secret'

답변

2

Firebase JWT에는 여기에없는 일부 구조가 있습니다. 이 인증 토큰에는 무엇이 있어야하는지에 대한 자세한 설명이 있습니다. https://www.firebase.com/docs/security/jwt-auth-token-format.html

다음은 적절한 구조의 스 니펫입니다.

require_once('JWT.php'); 

$fbSecret = 'your-secret'; 
$user = array('v' => 0, 'iat' => <timestamp>, 
    'd' => array('username' => 'jimbob', 'type' => 'admin',\ 
    'fullname' => 'Jim Bob') 
); 
$token = JWT::encode($user, $fbSecret); 

"d"필드에는 실제 페이로드가 들어 있습니다. "v"및 "iat"도 필요합니다. "iat"는 신기원 (자바 스크립트에서 getTime()이 반환하는 숫자) (new Date())의 시간 (초)이어야합니다.

관련 문제