身份验证:在Chrome扩展中通过Token实现持久登录状态

599 阅读2分钟

引言

在Chrome扩展的开发中,保持用户的登录状态是一项常见而重要的功能。本文将探讨如何通过使用通用令牌(token)在Chrome插件中有效管理用户的登录状态,确保用户体验的连贯性和安全性。

理解Token-Based身份验证

Token-based身份验证是现代应用中常用的一种身份验证方式,它允许用户在验证一次身份后,通过一个令牌(token)来进行后续请求的授权。这个令牌通常在用户成功登录后生成,并作为后续交互的凭证。

技术实现

1. 生成和发送Token

在用户首次登录时,后端服务会验证用户的凭证(如用户名和密码),并在验证成功后发放一个令牌。这个令牌通常包含用户的身份信息和一定的有效期,以JSON Web Token(JWT)的形式返回给前端。这时候我们需要创建一个自定义的事件来和插件进行通信,将Token传递给插件

 document.dispatchEvent(new CustomEvent('SendToken', { detail: { token: token } }));
2. 存储Token

在Chrome插件中,可以使用chrome.storageAPI来安全地存储令牌。这个API提供了本地存储的功能,允许扩展保存大量数据,同时保持数据在用户关闭浏览器后仍然可用。示例代码如下:

javascript
document.addEventListener('TokenSaved', function handleSendToken(e) {
  chrome.storage.local.set({ chatTokenPlugin: e.detail.token });
});

这里,我们创建了一个自定义事件TokenSaved,当token被保存后触发.

3. 使用Token进行请求

每次插件需要向后端发起请求时,都应从chrome.storage中读取令牌,并将其附加到请求的头部,通常是Authorization字段。这样,后端服务可以通过检查这个令牌来确认请求的合法性。示例代码如下:

//创建一个自定义事件来与插件进行通信
document.dispatchEvent(new Event('RequestToken'));
// 监听接收Token的事件
document.addEventListener('ReceiveToken', function (e) {
    resolve(e.detail.token)
});
//插件的content-script.js文件
//监听RequestToken事件,通过storage.local.get获取到token通过自定义一个事件ReceiveToken将token传递给项目
document.addEventListener('RequestToken', function handleRequestToken() {
  chrome.storage.local.get(['chatTokenPlugin'], function (result) {
    const event = new CustomEvent('ReceiveToken', { detail: { token: result.chatTokenPlugin } });
    document.dispatchEvent(event);
  });
});

ReceiveToken是另一个自定义事件,用于在token被读取时通知项目,确保可以正确地使用最新的认证信息。这里大家可能有疑问,直接通过给RequestToken事件传递一个回调函数不就可以了,这么麻烦还在自定一个ReceiveToken事件,这里由于自定义事件只能传递能够被序列化为字符串的数据,当传递函数的时候会导致detail所有数据都获取不到,所以这里只能在创建一个事件。

结论

通过自定义事件实现插件与项目间的数据传递,并利用chrome.storage API确保Token在所有经由该扩展访问的网页间的安全共享。