管理API访问令牌的最佳安全实践 (api访问)

教程大全 2025-07-17 03:54:39 浏览

【】如今,无论是基于Web的应用、还是本地原生的各种程序,都需要通过后端的API来实现资源的访问保护。要想得到API的授权,各种访问请求就必须包含相应的访问令牌或密钥。本文将向API提供者和应用程序开发人员重点介绍,我们在管理访问令牌中的各种最佳安全实践。

一、安全的第一原则

在我们处置安全性时,首先要考虑的一条原则是:不可相信任何人。如果您是一名API提供者,您不能保证正在调用API的应用程序就是您所预期的那个,您无法确信收到的令牌没有被盗,或者客户端和 服务器 之间的通信没有被截获。特别是在客户端,您无法确认应用程序没有被反编译过(而且已暴露了内嵌在应用程序之中的密码)。当然,您也无法确定应用程序的存储不会受到跨站脚本式攻击(详见,更无法保证您的用户没有在被欺骗的状态下进行伪造请求的提交(详见。可见,您必须采取适当的措施,来安全地获取、存储和管理那些调用后端API所需的安全令牌。

另外,您也许会认为:只要不被公开发布出去,自己的API就是安全的。您甚至还可能认为:由于API仅被自己的企业应用程序所用到,它们理所当然是私有的。可殊不知,如果它们可以在某个移动应用中被调用,那么它们就置于了公网之上。也就是说,任何暴露在企业网络外部的API,都应被视为公开的(详见

二、获取令牌的API密钥

在使用API​​时,我们通常有两种选择:一种是将一段静态信息与API调用同时进行传递;另一种是在调用API之前,动态地获取一段信息。这段信息通常被称为访问令牌或API密钥。由于一些历史遗留的问题,BasicAuth(译者注:BasicAuth认证方式是在每次请求API时,仅提供用户的username和password)仍在被某些API所使用着,但实际上,它已经不再是主流的认证解决方案了。

因此,在设计API的安全性方面,您必须谨慎地考虑到API使用者将如何去访问它。而在考虑所采用的安全措施时,您需要全面地分析各种风险因素。显然,我们对于咨询天气数据的API、与银行支付类型的API的保护,会采用截然不同控制措施。

虽然API​​密钥能够被开发人员轻松地实现和使用,但它的安全级别不及于使用访问令牌,通过双因素身份验证,来正确地识别出客户端应用身份的方式。此外,API密钥并不携带任何有关用户的信息,因此它不能被后端级别(backend level)用来决定API使用者可以进行哪些调用操作。再者,除非API提供者主动撤销,否则API密钥永远不会过期。

针对上述缺点,OAuth应运而生,其特点如下:

三、让我们从一些术语开始

OAuth所用到的术语有时会让人感到费解,让我们通过下面的表格,来了解一些与开发有关的重点术语。

四、Opaque与JWT

由于OAuth并不限制使用访问令牌的格式,因此按照OAuth服务器的实现规则,访问令牌既可以是Opaque(通常是一条不带有任何有用信息的长字符串),也可以是一种JSON Web令牌(JWT)。

JWT的优势在于它能够包含各种声明、或是有关用户的信息,而后端服务则可以籍此来进行各种业务逻辑的决策。

五、学习“OAuth舞蹈”

OAuth的授权类型决定了客户端将如何获取令牌。这在我们自己团队内部,常被戏称为“OAuth舞蹈”。因为虽然在OAuth世界中,有着很多种“跳舞形式”,但是有一种您必须记住,那就是:授权代码。虽说在某些情况下,其他授权类型可能也非常实用,但授权代码类型则是包括Web应用、原生应用、和移动应用在内的所有应用程序,获取访问令牌的推荐方法(详见

特别对于公共客户端和移动应用而言,我们建议采取额外的安全措施,来防止授权代码被盗。此类安全层往往被称为“代码交换证据密钥”(Proof Key for Code Exchange,PKCE)标准。您可以通过链接:,了解更多有关PKCE,以及如何使用它的信息。如果您是API提供者,请确保自己的OAuth服务器能够支持此选项。

同时,您应该特别注意资源所有者的密码授权。虽然它实现起来最为简单,但是由于其核心要求是在客户端与服务器间建立信任关系,因此您可能永远也用不到它。

六、令牌管理的建议

1. 注意OAuth应用的凭据泄漏

您会把应用程序的代码存储在GitHub中吗?您的OAuth应用凭据是否也会存储在那儿,特别是客户端的密钥?可您知道吗?这已经成为了当今信任凭据泄密的头号来源。只要这些凭据被盗,任何人都可以伪装成您的身份,发起中间人攻击。因此,如果您一旦发现凭据可能已被泄露,那就请立即重新生成新的凭据。

此外,请永远不要将客户端的密码放置在分布式代码之中,例如:通过应用软件商店、或客户端JavaScript下载的各类应用里。

2. 不要在应用程序中对令牌进行硬编码

千万不要为了图省事,而简化获取令牌的代码,并将其长时间存储在自己的应用程序之中。

3. 像处置密码一样去处置令牌

由于任何掌握了令牌和API密钥的人都能访问到对应的资源。因此,我们需要像处置各种密码那样,去认真地处理和保存各种令牌。

4. OAuth并非是身份验证协议

OAuth处理的是对资源访问权限的委派,因此它并非是一种身份验证协议(尽管名称很像)。我们可以将令牌看作酒店房间的钥匙。您需要让自己的身份得以验证,方可获得酒店钥匙。但是,一旦您手中已有了钥匙,它就不能再去验证您是谁了。最近发生的一些用户信息泄露事件证明了,API提供者不可单一地将是否持有令牌作为身份验证的依据。

另外,我建议您也参考一下OpenID Connect(OIDC,详见。不过,它只是一种补充性的规范,而并非是想在OAuth之上实现身份验证的功能。OIDC允许用户与应用程序共享其配置文件里的某些信息,但并不是他们的信任凭据。

5. 注意您在JWT中存储的内容和谁有权限访问

JWT能够以各种声明的形式存储大量的信息,如果这些信息被捕获,攻击者就能够轻松地解析出具体的内容(除非它们被加密了)。因此,如果您想使用JWT向后端服务传递有用的信息,那么您可以采用如下的实现方法:

如果想在整个流程中使用相同的令牌,并且让该令牌携带一些敏感的信息,那么请您务必加密该令牌的有效负载。也就是说,请永远不要使用JWT来携带用户的信任凭据,例如:密码!

6. 彻底验证JWT

在市面上,有些库和工具可以直接为您执行该操作、有些则需要您事先进行适当的配置、而另一些可能只能做到部分检查。因此,具体该使用哪一种方式,还取决于您所使用到的库。

7. 不要将令牌存储在本地,请使用安全的Cookie

任何在浏览器上的本地存储、和会话存储,都有可能被JavaScript所读取到。可见,用此方式来存储令牌之类的敏感信息是极不安全的。因此,您可以使用安全的Cookie、带httpOnly的标识、以及CSRF等措施,来防止令牌被盗。

8. 始终通过HTTPS和请求正文(Request Body)的方式传输令牌

通过这种方法,您可以限制令牌在传输过程中被捕获,或是被写到代理日志、以及服务器日志之中的风险。您还应该确保只使用TLS的1.2/1.3版本,以及在颁发和验证令牌的各个环境中,使用最安全的密码套件。

9. 使用专用的浏览器视图来请求信息

许多应用程序都用到了嵌入式的用户代理,但是,由于它屏蔽了用户去验证与之通信的网站真伪,因此,我们实际上应当避免使用这样的代理。此外,应用程序应当能够完全掌握用户所输入的凭据。正如那些OAuth原生应用所采用的最佳做法那样,一些API提供者会采取强安全措施,来应对此类问题。

七、结论

访问令牌是如今各种应用程序的实现基础,因此我们在处置的时候一定要倍加小心。如果您是一名后端开发者,您必须确保提供适当的授权类型,以获取访问令牌;同时还应该支持移动应用的PKCE;以及对JWT进行全面验证。而如果您是一位前端开发者,则必须能够管控JWT的存储、并保护应用的各种信任凭据。

参考

api访问

求2011考研计算机专业课大纲!

2010年计算机考研专业课大纲(三) 操作系统【考查目标】1. 了解操作系统在计算机系统中的作用、地位、发展和特点。 2. 理解操作系统的基本概念、原理,掌握操作系统设计方法与实现技术。 3. 能够运用所学的操作系统原理、方法与技术分析问题和解决问题。 一、 操作系统概述(一) 操作系统的概念、特征、功能和提供的服务(二) 操作系统的发展与分类(三) 操作系统的运行环境二、 进程管理(一) 进程与线程1. 进程概念2. 进程的状态与转换3. 进程控制4. 进程组织5. 进程通信共享存储系统;消息传递系统;管道通信。 6.线程概念与多线程模型(二)处理机调度1.调度的基本概念2.调度时机、切换与过程3.调度的基本准则4.调度方式5.典型调度算法先来先服务调度算法;短作业(短任务、短进程、短线程)优先调度算法;时间片轮转调度算法;优先级调度算法;高响应比优先调度算法;多级反馈队列调度算法。 (三)进程同步1. 进程同步的基本概念2. 实现临界区互斥的基本方法软件实现方法;硬件实现方法3. 信号量4. 管程5. 经典同步问题生产者-消费者问题;读者-写者问题;哲学家进餐问题。 (四) 死锁1. 死锁的概念2. 死锁处理策略3. 死锁预防4. 死锁避免系统安全状态:银行家算法。 5. 死锁检测和解除 三、 内存管理(一) 内存管理基础1. 内存管理概念程序装入与链接;逻辑地址与物理地址空间;内存保护。 2. 交换与覆盖3. 连续分配管理方式单一连续分配;分区分配。 4. 非连续分配管理方式分页管理方式;分段管理方式;段页式管理方式。 (二) 虚拟内存管理1. 虚拟内存基本概念2. 请求分页管理方式3. 页面置换算法最佳置换算法(OPT);先进先出置换算法(FIFO);最近最少使用置换算法(LRU);时钟置换算法(CLOCK)。 4. 页面分配策略5. 抖动抖动现象;工作集。 6. 请求分段管理方式7. 请求段页式管理方式四、 文件管理(一) 文件系统基础1. 文件概念2. 文件结构顺序文件;索引文件;索引顺序文件。 3. 目录结构文件控制块和索引节点;单级目录结构和两级目录结构;树形目录结构;图形目录结构。 4. 文件共享共享动机;共享方式;共享语义。 5. 文件保护访问类型;访问控制。 (二) 文件系统实现1. 文件系统层次结构2. 目录实现3. 文件实现(三) 磁盘组织与管理1. 磁盘的结构2. 磁盘调度算法3. 磁盘的管理五、 输入输出(I/O)管理(一) I/O管理概述1. I/O设备2. I/O管理目标3. I/O管理功能4. I/O应用接口5. I/O控制方式(二) I/O核心子系统1. I/O调度概念2. 高速缓存与缓冲区3. 设备分配与回收4. 假脱机技术(SPOOLing)5. 出错处理 计算机网络【考查目标】1. 掌握计算机网络的基本概念、基本原理和基本方法。 2. 掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理3. 能够运用计算机网络的基本概念、基本原理和基本方法进行网络系统的分析、设计和应用一、 计算机网络体系结构(一) 计算机网络概述1. 计算机网络的概念、组成与功能2. 计算机网络的分类3. 计算机网络与互联网的发展历史4. 计算机网络的标准化工作及相关组织(二) 计算机网络体系结构与参考模型1. 计算机网络分层结构2. 计算机网络协议、接口、服务等概念3. ISO/OSI参考模型和TCP/IP模型二、 物理层(一) 通信基础1. 信道、信号、宽带、码元、波特、速率等基本概念2. 奈奎斯特定理与香农定理3. 信源与信宿4. 编码与调制5. 电路交换、报文交换与分组交换6. 数据报与虚电路(二) 传输介质1. 双绞线、同轴电缆、光纤与无线传输介质2. 物理层接口的特性(三) 物理层设备1. 中继器2. 集线器 三、 数据链路层(一) 数据链路层的功能(二) 组帧(三) 差错控制1. 检错编码2. 纠错编码(四) 流量控制与可靠传输机制1. 流量控制、可靠传输与滑轮窗口机制2. 单帧滑动窗口与停止-等待协议3. 多帧滑动窗口与后退N帧协议(GBN)4. 多帧滑动窗口与选择重传协议(SR)(五) 介质访问控制1. 信道划分介质访问控制频分多路复用、时分多路复用、波分多路复用、码分多路复用的概念和基本原理。 2. 随即访问介质访问控制ALOHA协议;CSMA协议;CSMA/CD协议;CSMA/CA协议。 3. 轮询访问介质访问控制:令牌传递协议(六) 局域网1. 局域网的基本概念与体系结构2. 以太网与IEEE 802.33. IEEE 802.114. 令牌环网的基本原理(七) 广域网1. 广域网的基本概念2. PPP协议3. HDLC协议4. ATM网络基本原理(八) 数据链路层设备1. 网桥网桥的概念;透明网桥与生成树算饭;源选径网桥与源选径算法。 2. 局域网交换机及其工作原理。 四、 网络层(一) 网络层的功能1. 异构网络互联2. 路由与转发3. 拥塞控制(二) 路由算法1. 静态路由与动态路由2. 距离-向量路由算法3. 链路状态路由算法4. 层次路由(三) IPv41. IPv4分组2. IPv4地址与NAT3. 子网划分与子网掩码、CIDR4. ARP协议、DHCP协议与ICMP协议(四) IPv61. IPv6的主要特点2. IPv6地址(五) 路由协议1. 自治系统2. 域内路由与域间路由3. RIP路由协议4. OSPF路由协议5. BGP路由协议(六) IP组播1. 组播的概念2. IP组播地址3. 组播路由算法(七) 移动IP1. 移动IP的概念2. 移动IP的通信过程(八) 网络层设备1. 路由器的组成和功能2. 路由表与路由转发 五、 传输层(一) 传输层提供的服务1. 传输层的功能2. 传输层寻址与端口3. 无连接服务与面向连接服务(二) UDP协议1. UDP数据报2. UDP校验(三) TCP协议1. TCP段2. TCP连接管理3. TCP可靠传输4. TCP流量控制与拥塞控制六、 应用层(一) 网络应用模型1. 客户/服务器模型2. P2P模型(二) DNS系统1. 层次域名空间2. 域名服务器3. 域名解析过程(三) FTP1. FTP协议的工作原理2. 控制连接与数据连接(四) 电子邮件1. 电子邮件系统的组成结构2. 电子邮件格式与MIME3. SMTP协议与POP3协议(五) WWW1. WWW的概念与组成结构2. HTTP协议

vista 的UAC功能是什么?

WINDOWS Vista系统UAC功能简介提起Windows Vista操作系统中的UAC(用户帐户控制)功能,很多使用了Vista的用户对他的评价各不相同,下面的内容里就是对UAC的全面讲解,同时给大家展示Vista中UAC的更多应用技巧。 什么是UAC(用户帐户控制):UAC(User Account Control : 用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求所有用户在标准账号模式下运行程序和任务,阻止未认证的程序安装,并阻止标准用户进行不当的系统设置改变。 在最初的时候,这个功能曾被称为User Account Protection(用户帐户保护),后来才更名为目前的User Account Control(用户帐户控制)。 UAC的作用: 用户帐户控制(UAC)是Windows Vista的一个重要的新增安全功能。 它可以防止恶意软件获取特权,就算用户是以管理员帐户登录也可以起到保护作用。 UAC的必要性: UAC主要用来解决用户以管理员身份登录的问题。 由于有些系统功能或程序需要以管理员的身份操作,因此很多用户(包括IT专家)平时都会以管理员身份登录系统,这给系统安全带来了相当多的问题。 微软在以往的操作系统中也试图解决这一问题,现在UAC可以让用户以管理员身份登录,但是会以普通用户权限执行大部分操作,当用户试图执行一些需要较高权限的操作时,系统才会提升用户的操作权限。 UAC是如何工作的: UAC的一个基本任务就是将需要特权的任务从“普通”任务中提取出来,这样,用户就可以以普通用户的权限执行大部分任务,而以更高的权限执行特殊任务。 在UAC下,登录过程与以往的操作系统有了重大的改变。 当用户以管理员帐户登录时,会同时获得管理员访问令牌和普通用户访问令牌。 普通用户访问令牌可以用来启动(所有用户初始化进程的父进程,这些进程会继承的访问令牌权限)。 这意味着所有的程序将以普通用户权限进行工作,除非UAC对某个程序进行权限提升。 当管理帐号被设定为Administrator APProval Mode模式时,系统会按以上描述工作。

电脑一般能加几道密码,哪几道

硬盘密码BIOS密码 管理员密码一般加这三个 还有文件夹访问密码

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐