繁体   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