url 및 사용자 정의 액세스 토큰을 사용하여 액세스 보호 된 이미지를 다운로드 할 때 문제가 있습니다.Firebase 저장소 : http url 경로 및 맞춤 액세스 토큰을 사용하여 액세스 보호 된 이미지 다운로드
인증 오류 :
{
"error": {
"code": 403,
"message": "Permission denied. Could not perform this operation"
}
}
내가 놓친 몇 가지 구성이 있습니까?
I 쿼리 매개 변수로 정의 토큰 갖는 이미지에 액세스하는 데 사용하고의 HTTP URL :
https://myfirebasestorage.googleapis.com/v0/b/myfirebasestorage-my_proj_id.appspot.com/o/images%2FIMG_4138.JPG?alt=media&token=TOKEN_GOT_USING_CREATE_CUSTOM_TOKEN_SIGN_IN
내 저장 규칙 :
service firebase.storage {
match /b/myfirebasestorage-my_proj_id.appspot.com/o {
match /{allPaths=**} {
allow read: if request.auth != null;
}
}
}
사용자 정의 토큰은 다음과 같이 자바 응용 프로그램에서 생성됩니다
public static String createCustomToken(String userId, Map<String, Object> additionalClaims) {
FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(new FileInputStream(FIREBASE_ACCESS_FILE)).build();
FirebaseApp.initializeApp(options);
Task<String> customToken = FirebaseAuth.getInstance().createCustomToken(userId, additionalClaims);
return customToken.getResult().toString();
}
동일한 토큰의 진위 여부를 확인할 수 있습니다. . FirebaseAuth.getInstance() verifyIdToken (idToken)와 로그 출력을 사용하여 자바 응용 프로그램에서 다음과 같습니다 :
VerifiedToken=>uid: user_id_1,
email: [email protected],
additionalClaims: {
"aud": "myfirebasestorage-<my_proj_id>",
"auth_time": 1480609782,
"email": "[email protected]",
"email_verified": false,
"exp": 1480621773,
"iat": 1480618173,
"iss": "https://securetoken.google.com/myfirebasestorage-my_proj_id",
"sub": "user_id_1",
"circleId": "circle_id_1",
"memberId": "user_id_1",
"user_id": "user_id_1",
"firebase": {
"identities": {
},
"sign_in_provider": "custom”
}
}
서명 된 웹 클라이언트 코드에서이 사용자 정의 토큰 후, 아래와 같이 올바른 응답을 볼 수 있습니다
{
"uid": "user_id_1",
"displayName": null,
"photoURL": null,
"email": null,
"emailVerified": false,
"isAnonymous": false,
"providerData": [],
"apiKey": "API_KEY",
"appName": "[DEFAULT]",
"authDomain": "myfirebasestorage-<my_proj_id>.firebaseapp.com",
"stsTokenManager": {
"apiKey": "API_KEY",
"refreshToken": "REFRESH_TOKEN_FROM_FIREBASE",
"accessToken": "ACCESS_TOKEN_FROM_FIREBASE",
"expirationTime": 1480621773681
},
"redirectEventId": null
}
참고 : 나는 토큰 아래와 같은 정의를 사용하여 중포 기지 데이터베이스에 노드를 액세스 할 수있게되었습니다.
https://myfirebasestorage-my_proj_id.firebaseio.com/games/basic_info.json?orderBy=%22owner_id%22&limitToFirst=30&auth=ACCESS_TOKEN_FROM_FIREBASE
내 데이터베이스 규칙
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
이 페이지에서 "사용자 개인"또는 "그룹 개인"이라는 제목으로 언급 한 Firebase 데이터베이스뿐만 아니라 Firebase 저장소에도 토큰이 적용될 수 있다고 생각했습니다. 한번 봐주세요. https://firebase.google.com/docs/storage/security/user-security 기억 장치는 사용자가 직접 firebase 콘솔에서 검색 할 수도있는 이해할 수없는 다운로드 URL을 제공합니다.> 객체 속성 -> "다운로드 URL" . 문제는 누군가가 다운로드 URL을 알 자마자 사용자 기반 액세스 보호와 같은 것이 없습니다. 누구나 내용을 볼 수 있으므로 보안 방법이 없습니다 – Philonoist
내 사용 사례는 다음과 같습니다.> 내 친구 그룹에있는 한 내 비디오를 나와 공유하십시오.일단 당신이 내 친구 그룹을 떠나면, 나는 당신과 어떤 것을 공유하고 같은 그룹의 다른 친구에게만 내용을 제한하고 싶지 않을 것입니다. 하지만이 경우에는 더 이상 내 친구 그룹에 속하지 않아도 이미 비디오 URL을 얻었으므로 해당 비디오에 계속 액세스 할 수 있습니다. – Philonoist