github - 如何在单页应用程序中保存 GitHub 访问令牌?
问题描述
我创建了一个单页应用程序 (SPA),它依赖于 GitHub API v4。API 需要访问令牌才能访问,因此我创建了一个输入元素来要求用户存储他们的访问令牌。我想保留输入的令牌,以便用户在重新加载或重新访问站点后不会重新输入令牌,而无需构建任何后端服务器。
我尝试了几件事来实现我的目的:
- 将令牌保存在
localStorage
这很容易,但是在存储中存储秘密信息存在安全问题,因此我拒绝了这种方法。
- 使用GitHub OAuth App获取令牌
它不适合,因为它需要存储client secret
在我的应用程序中。由于我的应用程序是 SPA,因此任何用户都可以读取存储的密钥。
- 使用 Auth0 绕过认证
起初,获取 GitHub 访问令牌似乎很容易,但它需要后端代理服务器来获取令牌,如此处所述
没有任何后端服务器就不可能持久化令牌吗?
如果是这样,如何轻松持久化令牌?目前,我想出了以下解决方案:
- 使用 AWS Lambda 加密令牌并将其保存到 cookie
当用户输入令牌时,应用程序将令牌发送到 Lambda 函数,该函数对令牌进行加密并将其响应到 cookie 中。当用户返回我的应用程序时,应用程序将 cookie 发送到 Lambda 函数并解密令牌并将其发送回应用程序。
- 使用 AWS Lambda 作为代理与 Auth0 通信
如此处所述,Lambda 函数可以通过 Auth0 检索 GitHub 访问令牌。但是,我不想这样做,因为我不想使用两个外部服务来保存令牌。
解决方案
推荐阅读
- python - Python中“”和[]的区别
- javascript - 打字稿未定义变量,从外部文件中获取
- javascript - jQuery:事件不能对动态创建的元素起作用
- css - Chrome + position:fixed + background-attachment:fixed 的奇怪行为
- hibernate - javax.persistence.Query 使用 spring 和 hibernate 选择一条记录
- spring - Spring MVC 控制器返回视图或 JSON
- flutter - Flutter:行横轴展开
- c - 如何正确设置 OpenCL?
- typescript - 根据 TypeScript 中的参数值更改返回类型
- python - Python 2.7.15 MongoDb 身份验证失败