2014-01-19 2 views
2

PHP 스크립트 (CURL 요청을 통해) 만 위치에 쓸 수 있도록 Firebase에서 보안 규칙을 만들려고합니다.CURL/PHP 소스의 쓰기 만 허용하도록 Firebase 보안 규칙을 구성하려면 어떻게합니까?

보안 규칙에 따라 URL에 .json? auth = MYAPPTOKEN을 추가하여 읽기/쓰기 권한이있는 사람이 PHP 스크립트를 사용하여 읽고 쓸 수 있습니다.

간단한 로그인을 사용하여 사용자를 위치에 대한 읽기/쓰기로부터 포함/제외시킬 수 있으므로 보안 규칙 구문/작업에 대한 기본 핸들이 있다고 생각합니다.

이제 Firebase에서 내 PHP 파일에서만 쓸 수있는 위치를 갖고 싶습니다. 내가 해봤

보안 규칙 : 다른 측면에서

".write":"auth.secret == "MYTOKEN", 
".write":"auth == "MYTOKEN", 
".write":"auth.token == "MYTOKEN", 

, 나는 .json을 수정 시도했습니다 인증 = 요청에?. 여기에 내가 무엇을 시도했다입니다 :

$auth = array("token" => "MYTOKEN"); 
$auth = json_encode($auth); 

두 번째 시도 :

$auth = json_encode("MYTOKEN"); 

그리고 다음 .json을 교체

그래서, 어떻게 할 인증 = MYTOKEN와 .json 인증 = $ 인증? 해당 스크립트 만 위치에 기록하도록 허용합니까?

감사합니다.

답변

4

기본 원칙은 기본적으로 캡처 한 것으로 생각되는 쓰기를 허용하는 PHP 스크립트 인증 자격 증명 만 제공하는 것입니다.

MYTOKEN이 Firebase 암호를 나타내는 경우 (이 코드는 사용하지 않아야합니다),이 토큰은 admin : true를 내부적으로 설정하기 때문에 보안 규칙은 무시됩니다.

따라서 보안 규칙을 ".read": false, ".write": false으로 설정하면 관리 토큰을 사용하지 않는 사람에게 액세스하지 못하게 할 수 있습니다.

generating the token yourself이있는 경우 (아마도이 ​​경우에 해당해야 함) 보안 규칙에서 참조 할 수있는 변수를 토큰에 추가해야합니다 (예 : isMyPhpScript: true).

당신은 미래로 수년 날짜를 사용하여 아무 만료와 토큰을 시뮬레이션 할 수 있습니다, 그래서 여전히 비밀처럼 작동하지만, 당신이 보안 제한을 적용 할 수 있습니다 : 규칙에 이제

var FirebaseTokenGenerator = require("firebase-token-generator"); 
var tokenGenerator = new FirebaseTokenGenerator(YOUR_FIREBASE_SECRET); 
var veryFarInFuture = Date.now() + 8e+14; 
var token = tokenGenerator.createToken({ isMyPhpScript: true }, { expires: veryFarInFuture }); 

당신 이 같은 일을 작성할 수 있습니다

".read": "auth.isMyPhpScript === true" 

스크립트를 작성하지 않고 토큰 신속하게 사용자 정의를 만들려면

, 당신은 할 수 use this fiddle 난 내 자신의 땜질을 위해 만들었습니다.

+0

이것은 정확히 내가 찾던 해결책입니다. Kato에게 감사드립니다. Firebase에서 "읽기/쓰기 시뮬레이션"콘솔을 사용할 때 토큰 생성기가 인증에 필요한 전체 JSON을 생성하기 때문에 Kato의 유틸리티로 생성 된 전체 json을 복사하여 붙여 넣지 마십시오. 반면 Firebase 인터페이스는 당신은 단지 "d"섹션을 제공한다고 가정합니다. 확실히 카토의 유틸리티를 사용하십시오 - 매끄러운입니다. –

+0

만료 된 것으로 보입니다. 0은 더 이상 영원한 것을 의미하지 않습니다. 오류 : EXPIRED_TOKEN : 인증 토큰이 만료되었습니다. 0을 사용할 경우 { "exp": 0, "v": 0, "iat": 1435608696, "d": { "id": "kato"}} 만료됩니다. –

+0

좋은 캐치. [fiddle] (http://jsfiddle.net/firebase/XDXu5/)을 시도하고 만료 필드에 대해 "max"를 클릭하십시오. 그것은 동등합니다. – Kato

관련 문제