簡體   English   中英

如何使用 FirebaseUser 設置自定義聲明?

[英]How to set custom claims with FirebaseUser?

我正在嘗試向自定義聲明添加一些鍵值對,但找不到任何功能。 你如何在Android上做到這一點?

例如,我可以這樣設置顯示照片:

FirebaseUser user = ...;
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                            .setPhotoUri(Uri.parse(response.body().getPhotoURI()))
                            .build();

user.updateProfile(profileUpdates).addOnCompleteListener(task -> { ... });

Client SDK 存在風險,因為惡意客戶端也可以修改數據 可能現在可以在控制台中添加聲明,我不確定。 這可能就是您要尋找的東西。 使用 Firebase Auth 自定義聲明控制數據訪問

將各種標准添加為自定義聲明聽起來可能是個好主意。 例如,您可能想要添加家庭住址、其他照片 URL 或個人資料描述。 但這不是定制聲明的設計目的。 地址等數據應存儲在數據庫中,因為它與身份驗證無關。 令牌不是個人資料!

通過 Admin SDK 設置和驗證自定義用戶聲明

自定義聲明可能包含敏感數據,因此它們只能由 Firebase Admin SDK 從特權服務器環境中設置。

 // Set admin privilege on the user corresponding to uid. Map<String, Object> claims = new HashMap<>(); claims.put("admin", true); FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);

下一次發布新的自定義聲明時,新的自定義聲明將傳播到用戶的 ID 令牌。

並使用它:

 // Verify the ID token first. FirebaseToken decoded = FirebaseAuth.getInstance().verifyIdToken(idToken); if (Boolean.TRUE.equals(decoded.getClaims().get("admin"))) { // Allow access to requested admin resource. }

或作為客戶:

 // Lookup the user associated with the specified uid. UserRecord user = FirebaseAuth.getInstance().getUser(uid); boolean claim = Boolean.parseBoolean(user.getCustomClaims().get("admin"));

您可能想閱讀以下內容: Firebase Custom Claim Java

無法直接在客戶端應用程序中設置自定義聲明。 這將被視為一個安全問題。 自定義聲明是一種靈活的安全機制,允許您授予用戶對后端資源的訪問權限。 如果用戶可以授予自己自定義聲明,那么它們將是一種無效的資源保護方法。

您應該使用 Firebase Admin SDK 在您控制的后端分配自定義聲明,並確保僅在您允許的特定情況下向用戶授予聲明 - 用戶不應能夠為自己分配自定義聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM