我正在通過url和自定義訪問令牌下載受訪問受保護圖像時遇到問題。Firebase存儲:使用http url路徑和自定義訪問令牌下載訪問受保護的圖像
驗證錯誤:
{
"error": {
"code": 403,
"message": "Permission denied. Could not perform this operation"
}
}
有一些配置我失蹤?
我使用的訪問具有作爲查詢參數的自定義標記圖像HTTP網址:
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;
}
}
}
在下面的Java應用程序生成自定義令牌:
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)和日誌輸出Java應用程序如下:
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」
}
}
簽約,與來自Web客戶端代碼這個自定義的令牌後,我可以看到如下的正確響應
{
"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控制檯 - >對象屬性 - >「下載網址」 。問題是隻要有人知道下載網址,就沒有基於用戶的訪問保護這樣的事情:任何人都可以查看內容,因此沒有辦法保護它 – Philonoist
我的用例如下=> 我想只要你在我的朋友組,就與我分享我的視頻。一旦你離開我的朋友組,我不想與你分享任何內容,並只將內容限制在同一組中的其他朋友。 但在這種情況下,即使您不再是我的朋友組的一部分,並且您已經擁有了視頻網址,您仍然可以繼續訪問該視頻。 – Philonoist