我可以将chrome.Identity与Firebase自定义身份验证一起使用吗? [英] Can I use chrome.identity with Firebase custom authentication?
本文介绍了我可以将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:
- 搜索您要使用的API,并确保在您的项目中已激活。在我的案例中Cloud FiRestore API。
- 转到API Access导航菜单项,然后单击创建OAuth 2.0客户端ID...蓝色按钮。
- 选择Chrome应用程序并输入您的应用程序ID(与扩展管理页面中显示的ID相同)。
- 将此客户端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屋!
查看全文