【问题标题】:How to create Firebase Authentication claims?如何创建 Firebase 身份验证声明?
【发布时间】:2018-05-09 18:59:26
【问题描述】:

我正在开发一个需要通过服务器应用程序进行身份验证的 Android 应用程序。服务器应用程序是一个使用 Spring Security 的 Spring Boot 应用程序。服务器应用程序使用自定义身份验证提供程序为用户设置授予权限。

这是我用来检索 idToken 的代码:

    FirebaseToken firebaseToken = null;

    try {
        FirebaseApp app = FirebaseUtil.getFirebaseApp();
        firebaseToken = FirebaseAuth.getInstance(app).verifyIdTokenAsync(authenticationToken.getIdToken()).get();
    } catch ( InterruptedException | ExecutionException | CancellationException e ) {
        throw new AuthenticationServiceException(e.getMessage());
    } 

    return firebaseToken; 

我有一个 Firebase 令牌,我可以像这样检索声明:

Map<String, Object> claims = token.getClaims();

然后我可以遍历声明并像这样创建权限:

List<GrantedAuthority> authorities = Lists.newArrayList(); 
authorities.add(new SimpleGrantedAuthority("some_role"));

我不知道如何使用 Firebase 控制台创建声明。这可能吗?我怀疑我需要使用 Firebase 数据库,但在 firebase 文档中找不到我正在寻找的确切内容。

【问题讨论】:

    标签: firebase spring-security firebase-authentication


    【解决方案1】:

    Firebase 身份验证的自定义声明目前只能通过 Firebase Admin SDK 创建。来自documentation on creating custom claims

    // Set admin privilege on the user corresponding to uid.
    admin.auth().setCustomUserClaims(uid, {admin: true}).then(() => {
      // The new custom claims will propagate to the user's ID token the
      // next time a new one is issued.
    });
    

    允许从控制台创建声明也不是一个坏主意,所以我建议你file a feature request

    【讨论】:

    • 嗯,好的。感谢您的回复
    • 看起来自定义声明只能通过 javascript 创建,因为我使用的服务器应用程序是用 java 开发的,所以这对我来说排除了这一点。我可以创建自定义令牌,但我想做的是使用现有的身份验证机制之一,最好是电子邮件和密码,并使用 Java SDK 添加声明。这似乎是不可能的。
    • 这个 API 被添加到 Firebase Java Admin SDK。此 API 不会暴露给客户端,因为出于安全原因,设置用户角色不是可以在客户端完成的。如果您打算添加任意用户字段,最好使用数据库。
    【解决方案2】:

    您也可以使用 Python 轻松完成:

    auth.set_custom_user_claims(user_id, {"admin":True}, app=None)
    

    【讨论】:

      猜你喜欢
      • 2021-06-30
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2021-06-29
      相关资源
      最近更新 更多