当前位置: 首页 > 知识库问答 >
问题:

自定义身份验证属性可以在Firebase3中实现并与安全安全规则一起使用吗?

海岳
2023-03-14

遗留的Firebase文档指出,您可以将属性插入到数据库安全规则中使用的auth对象中。实际上,在我升级到版本3之前,我的应用程序中已经很好地使用了这种方法。

“传递到createToken()中的任何值都会附加到auth变量上,以便在安全和Firebase规则中使用。”

但是,我肯定会生成一个自定义签名的JWT令牌,并且它肯定会被Firebase自定义身份验证方法接受。当我将custom-auth-server-returned JWT令牌负载粘贴到Firebase rules Simulator中时,我还肯定获得了访问正确路径的规则(例如,“/domains/myDomainCom”下的所有数据)。

当我通过getCurrentUser()查看用户时,我对firebase auth对象没有可见性,因为它可能会呈现给规则引擎(例如,currentUser对象中似乎没有包含我的任何自定义声明),所以我真的不明白如何进一步调试。

我特别在寻找关于Firebase规则上有哪些其他调试方法可用于自定义身份验证的提示,以及/或其他人是否可以确认他们已经成功地使自定义身份验证属性与Firebase3中的规则一起工作。

js prettyprint-override">{
  "iss": "<client_email>",
  "sub": "<client_email>",
  "aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
  "exp": 1463955043,
  "iat": 1463951442,
  "provider": "gas",
  "domain": "mydomaincom",
  "email": "myemail@mydomain.com",
  "uid": "<FB UID HERE>",
  "userGoogToken": "<LONG TOKEN HERE>",
  "adminGoogToken": "<LONG TOKEN HERE>"
}

下面是规则文件:

{
  "rules": {
    "domains": {
      "$domain": {
        ".read": "$domain == auth.domain",
        ".write": "$domain == auth.domain"
      }
    }
  }
}

共有1个答案

艾嘉石
2023-03-14

根据您指向的文档,可以在身份验证规则中使用的附加声明需要在claims属性中指定为附加声明的映射。试试看:

{
  "iss": "<client_email>",
  "sub": "<client_email>",
  "aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
  "exp": 1463955043,
  "iat": 1463951442,
  "provider": "gas",
  "email": "myemail@mydomain.com",
  "uid": "<FB UID HERE>",
  "userGoogToken": "<LONG TOKEN HERE>",
  "adminGoogToken": "<LONG TOKEN HERE>",
  "claims": {
    "domain": "mydomaincom"
  }
}
 类似资料:
  • 我有一个angular web应用程序,我没有使用Firebase身份验证来登录我的用户,因为它是通过服务完成的。 现在,我的firestore帐户有完全的访问权限,任何人都可以执行任何操作。 我阅读了安全规则的文档,到处都提到了firebase Auth。有没有一种方法来定义规则,而不使用firebase Auth?

  • 我有Springmvc应用程序。我添加了带有CustomAuthentiationManager的Spring Security。这是appC中包含的application-security.xmlontex.xml.login.jsp我使用带有2个输入的标准登录页面:name='j_username'

  • 我们希望使用外部身份提供者将现有的Spring Security项目从自定义用户名/密码实现(UserDetailsService等)迁移到oauth2登录。 但是,当通过外部提供程序登录时,安全上下文中的身份验证对象是一个,主体是一个。 由于我们在应用程序中使用的都是自定义身份验证主体,因此我们希望将转换为自定义对象。 对于oauth2资源服务器,似乎有一个API可让您将JWtAuthentia

  • 但是该实现假设身份验证也是通过存储在数据库中的密码(@Password注释)完成的。我们希望根据LDAP对用户进行身份验证,然后根据存储在数据库中的内容分配角色。 是否有可用的教程/拦截器?我为每一个输入感到高兴? PS:quarkus安全ldap扩展不是解决方案,因为它假设角色也存储在ldap中。

  • 我正在尝试通过连接到LDAP使用Spring Security进行我的第一个演示。 我使用的Sping版本是:3.1.0.RELEASE 以下是我的security-integration.xml: 然而,每当我部署我的战争时,我都会遇到这个例外: HTTP状态500 - 类型异常报告 消息 描述服务器遇到一个内部错误(),该错误阻止它完成此请求。 例外情况 javax.servlet。Servl

  • 我正在开发REST webService,我的一些客户机将使用我的webservices,所以为了识别真正的客户机,我决定给每个真正的客户机一个唯一的应用程序令牌。客户机将对这个令牌进行编码,他们将把这个令牌放在请求头中,我已经在我的REST webservices中配置了一个REST过滤器来验证令牌。我不想使用https。我的问题是,任何人都可以从我的客户端站点获取该令牌,并可以使用我的REST