我可以将chrome.Identity与Firebase自定义身份验证一起使用吗? [英] Can I use chrome.identity with Firebase custom authentication?

查看:0
本文介绍了我可以将chrome.Identity与Firebase自定义身份验证一起使用吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个Chrome扩展,希望使用Firebase来持久化用户之间共享的状态。Firebase身份验证在Chrome扩展中不起作用,因为没有原始域。chrome.identity接口可用于确保用户经过身份验证并获取OAuth请求的访问令牌。

几个注意事项:

  • 使用chrome.storage存储令牌并使用该令牌向Firebase进行身份验证。存储区域未加密,因此从用户的磁盘读取用户的令牌非常简单。
  • 我假设chrome.identity.getAuthToken返回的令牌是OAuth访问令牌,因此是暂时的-它不适合用户的永久唯一标识符。
  • 我可以向Google OAuth API请求交换用户配置文件(https://www.googleapis.com/userinfo/v2/me)的访问令牌,该配置文件包含id字段,但这是公共的。

推荐答案

我在寻求解决类似问题的过程中遇到了这个问题。我相信这个问题已经过时了,但也许我的解决方案能帮助其他人在这个问题上遇到困难。

确实可以使用chrome.identity进行Firebase身份验证...但这种方式并不是通过自定义身份验证方法。还有一种方法可以接受来自chrome.identity.getAuthToken的OAuth2令牌。

以下是我在tutorial之后所做的一切:
(它还提到了一个针对非Google身份验证提供商的解决方案,我没有尝试过)

身份权限

首先,您需要拥有使用Chrome Identity API的权限。您可以通过将此内容添加到您的manifest.json

来获得它
{
  ...
  "permissions": [
    "identity"
  ],
  ...
}

一致的应用程序ID

您需要在开发过程中保持一致的应用程序ID才能使用OAuth过程。为此,您需要将密钥复制到manifest.json的已安装版本中。

要获得合适的key值,请首先从.crx文件安装您的扩展(您可能需要手动上载或打包您的扩展)。然后,在您的用户数据目录(在MacOS上是~/Library/Application Support/Google/Chrome)中,查看文件Default/Extensions/EXTENSION_ID/EXTENSION_VERSION/manifest.json.您将看到那里填写了密钥值。

{
  ...
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFbIrnF3oWbqomZh8CHzkTE9MxD/4tVmCTJ3JYSzYhtVnX7tVAbXZRRPuYLavIFaS15tojlRNRhfOdvyTXew+RaSJjOIzdo30byBU3C4mJAtRtSjb+U9fAsJxStVpXvdQrYNNFCCx/85T6oJX3qDsYexFCs/9doGqzhCc5RvN+W4jbQlfz7n+TiT8TtPBKrQWGLYjbEdNpPnvnorJBMys/yob82cglpqbWI36sTSGwQxjgQbp3b4mnQ2R0gzOcY41cMOw8JqSl6aXdYfHBTLxCy+gz9RCQYNUhDewxE1DeoEgAh21956oKJ8Sn7FacyMyNcnWvNhlMzPtr/0RUK7nQIDAQAB",
  ...
}

将此行复制到您的源manifest.json

使用Google Cloud API注册您的扩展

您需要在Google API控制台中注册您的应用程序才能获得客户端ID:

  1. 搜索您要使用的API,并确保在您的项目中已激活。在我的案例中Cloud FiRestore API
  2. 转到API Access导航菜单项,然后单击创建OAuth 2.0客户端ID...蓝色按钮。
  3. 选择Chrome应用程序并输入您的应用程序ID(与扩展管理页面中显示的ID相同)。
  4. 将此客户端ID放入manifest.json中。您只需要userinfo.email范围
{
  ...
  "oauth2": {
    "client_id": "171239695530-3mbapmkhai2m0qjb2jgjp097c7jmmhc3.apps.googleusercontent.com",
    "scopes": [
      "https://www.googleapis.com/auth/userinfo.email"
    ]
  }
  ...
}

获取和使用Google Auth令牌

chrome.identity.getAuthToken({ 'interactive': true }, function(token) {
    // console.log("token: " + token);
    let credential = firebase.auth.GoogleAuthProvider.credential(null, token);
    firebase.auth().signInWithCredential(credential)
        .then((result) => {
            // console.log("Login successful!");
            DoWhatYouWantWithTheUserObject(result.user);
        })
        .catch((error) => {
            console.error(error);
        });
});

享受您的Firebase服务...

这篇关于我可以将chrome.Identity与Firebase自定义身份验证一起使用吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆