如何在 Angular 应用程序中存储身份验证令牌

2024-04-08

我有一个与 REST API 服务器通信的 Angular 应用程序 (SPA),我有兴趣找到存储从 API 服务器返回的访问令牌的最佳方法,以便 Angular 客户端可以使用它来验证未来的请求到 API。出于安全原因,我想将其存储为浏览器会话变量,以便在浏览器关闭后令牌不会保留。

我正在使用资源所有者密码授予来实现 OAuth 2.0 的稍微定制版本。 Angular 应用程序提供了一个表单供用户输入用户名和密码。然后,这些凭据将发送到 API 以换取访问令牌,然后必须将访问令牌作为所有出站请求的标头(授权:Bearer %Token%)发送到 API,以便 API 可以授权对其他路由的请求。

我对 Angular 领域相当陌生,但我想要实现的处理这些令牌的工作流程总结如下。

1)客户端向 API 发出请求,为其提供用户凭据。

2)如果此请求成功,则存储令牌某处(问题在哪里)

3)拦截 HTTP 请求。如果设置了 token,则将其作为标头传递给 API

4)当浏览器/选项卡关闭时,令牌将被销毁。

我知道 Angular 提供$window.sessionStorage,这似乎是我正在寻找的,但根据我阅读的各种资源,我担心它可能无法在所有浏览器上运行。这是企业级应用程序,必须兼容多种浏览器(IE、Chrome、Firefox)。我可以安全地使用它并确信它会稳定吗?

据我了解,替代方案是 $window.localStorage 或 cookies ($cookies, $cookieStore)。这对我来说不是一个理想的解决方案,因为我不希望这些数据持续存在,但如果这更可靠,我将不得不牺牲效率来换取兼容性。我还认为可以简单地将其设置为 $rootScope 上的值并以这种方式引用它,但我不确定这是否可行。

我希望这一切都有道理。任何帮助/建议将不胜感激。 谢谢!


如果您正在寻找肯定不会持久的东西,那么我只会将令牌保留在内存中,而不依赖浏览器进行存储。然而,存储在 rootScope 内并不是最佳实践。

如果您还没有这样做,我建议您将服务器访问代码包装在 Angular 服务中。然后,您可以在运行时将令牌封装在该服务中(例如作为属性),而不必担心从应用程序的其他部分调用时必须访问它。

角度服务 https://docs.angularjs.org/guide/services是单例的,因此您的“服务器服务”将是一个可以使用正常依赖注入访问的全局实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Angular 应用程序中存储身份验证令牌 的相关文章

随机推荐

  • 在 MEF 和 MAF 之间进行选择 (System.AddIn)

    托管扩展性框架 MEF 和托管外接程序框架 MAF 又名 System AddIn 似乎完成非常相似的任务 根据这个堆栈溢出问题 MEF 是 System Addin 的替代品吗 https stackoverflow com questi
  • Angular 5:使用 Angular 将回调方法传递给第三方脚本

    I really导入的第 3 方脚本来触发类似的功能show end screen below 我的组件 import Router from angular router import init game start game stop
  • Android 应用程序密钥哈希与任何存储的密钥哈希不匹配

    我在 Play 商店上有一个生产应用程序 它使用 Facebook SDK 登录 当我从 Eclipse 调试应用程序时没有问题 但是当它投入生产时 在 Facebook 询问我权限后 它给了我以下错误 我已使用以下命令在developer
  • 如何杀死 ubuntu 上端口上的进程

    我正在尝试在命令行中终止 ubuntu 中特定端口的进程 如果我运行此命令 我会得到端口 sudo lsof t i 9001 所以 现在我想运行 sudo kill sudo lsof t i 9001 我收到此错误消息 ERROR ga
  • 如何使用 Python 将 Excel 图表粘贴到 PowerPoint 占位符中?

    我有一个 excel 文件 其中一个名为的选项卡上有一系列格式化图表Charts 我已经给图表命名了 Figure1 Figure2 Figure3 etc 我有一个现有的 PowerPoint 模板 该模板每张幻灯片有 2 个占位符 以便
  • 列表视图的自定义适配器

    我想创建一个custom adapter对于我的列表视图 是否有任何文章可以引导我完成如何创建一个并解释其工作原理 public class ListAdapter extends ArrayAdapter
  • Cordova 3.7 在每个本机调用上复制 iframe

    自从我升级到 Cordova 3 7 以来 每个本机调用都会将一个新的 iframe 附加到 DOM 如下所示 为了排除现有代码影响 cordova 的可能性 我尝试使用 cordova CLI 创建一个新代码 添加控制台插件并在 devi
  • 几何级数中的数字

    如何在 R 中生成几何级数中的数字序列 例如我需要生成序列 1 2 4 8 16 32 等等 直到说一个有限值 这就是我要做的 geomSeries lt function base max base 0 floor log max bas
  • 模块之间共享资源的良好做法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ruby datamapper 将无法加载

    我试图通过遵循本教程来了解 Sinatra ruby 框架 http net tutsplus com tutorials ruby singing with sinatra the recall app 2 http net tutspl
  • Double Not Exists SQL逻辑解释

    有 2 张表 一张称为 drinkers 有一列名称 另一个称为 frequents 有 2 列 即 drinkers 和 bars 他们经常光顾的 我有一个查询可以回答此声明 Drinkers who frequent all bars
  • Android:以编程方式从剪贴板中删除单个项目

    Android 剪贴板服务允许您将文本或其他项目添加到剪贴板中 在大多数 Android 设备上 Clipdata 项目将被插入到未定义最大内容数的堆栈中 我的问题如下 我有一个密码管理器应用程序 可以将选定的密码插入剪贴板 但由于密码是高
  • 如何在Delphi中一次正确地释放包含各种类型的记录?

    type TSomeRecord Record field1 integer field2 string field3 boolean End var SomeRecord TSomeRecord SomeRecAr array of TS
  • CompiledQuery 与 List.Contains (where...in list) 功能?

    我正在尝试使用 Linq to Entities 编写 CompiledQuery 它将替换采用两个数组 在本例中为逗号分隔的 TEXT 参数的存储过程 本质上 SQL 是这样的 Stored Proc definition ArrayPa
  • PHP 到期日期

    背景信息 我正在为游戏 garrys mod 创建一个捐赠 购买系统 当用户通过 paypal 捐赠时 我有 php 代码来处理 iPN 并将数据输入数据库 它还会生成一个序列密钥并将其通过电子邮件发送给用户 然后用户可以在游戏中输入该密钥
  • 玩!无法将 java 列表转换为 scala 列表

    我正在尝试将字符串列表从 java 控制器传递到 scala 模板 这是查看代码 public static Result index List
  • 如何从 JavaScript 通过 TCP 套接字进行通信?

    我正在考虑 AJAX 应用程序必须轮询更新是多么的限制 而 javascript 最好能够建立到服务器的真正的双向连接 我想知道是否有某种方法将 javascript 与浏览器插件集成 可以建立 TCP 连接 以便我可以将数据传入和传出浏览
  • 如果用户在 WPF 中键入任何内容,请检查密码框

    我在用PasswordBox我想检测用户何时输入任何内容 如果是 我需要将按钮状态更改为启用 如何检查用户是否输入任何内容 在里面PasswordBox 它的行为不同于TextBox因为你不能将它绑定到文本 当用户输入任何内容时会引发一些事
  • 是否可以通过 FTP 代理使用 C# FtpWebRequest?

    据我了解 FtpWebRequest Proxy属性表示 HTTP 代理 我必须通过 FTP 代理向外部服务器发出 FTP 请求 到目前为止 我实现此功能的唯一方法是创建一个使用 Windows FTP 命令的脚本并以这种方式下载 是否可以
  • 如何在 Angular 应用程序中存储身份验证令牌

    我有一个与 REST API 服务器通信的 Angular 应用程序 SPA 我有兴趣找到存储从 API 服务器返回的访问令牌的最佳方法 以便 Angular 客户端可以使用它来验证未来的请求到 API 出于安全原因 我想将其存储为浏览器会