写在开始:
1️⃣ 本文仅用作个人java日常开发记录学习使用,如果涉及版权或者其他问题,及时联系小编修改或者下架,多谢
2️⃣作为Java开发者,本文简单介绍token的概念和使用实践~
背景: 之前接触过TOKEN这个概念, 最近刚好有一个相关的经历,因此分享一下!!!
1-Token是什么
①计算机领域中,token 通常是指一串字符或符号,比如微信公众平台的密钥,就被称作一个 token,其实就是一长串的字符。
②在人工智能领域,尤其是自然语言处理(Natural Language Processing, NLP)中, “token” 指的是处理文本的最小单元或基本元素。
它可以是一个单词、一个词组、一个标点符号、一个子词或者一个字符。
③本文介绍的是关于认证机制的Token应用;
目前在标准对接和非标对接的过程中,系统对接的安全验证系统里,一般都是需认证或者授权,来保证安全;
那么在接口安全认证领域,常见方式分为2类:基础认证(包括密钥验证、接口签名、BA认证等) 和 进阶类型OAuth2.0授权等等。
第一类基础认证【静态凭证认证】一般通过预置密钥或约定算法(比如将分配密钥和请求参数加密生成签名)实现身份核验,整个过程可在对接的业务逻辑去完成,密钥存储在安全管理系统,签名计算写代码来执行。
而第二类OAuth2.0采用动态令牌机制,引入了访问令牌(access token)的概念,调用方需先通过授权服务器获取有时效的访问令牌(类似临时通行证),业务接口调用时需携带该令牌,且支持令牌到期前的自动刷新。
由于涉及多系统交互和多种授权模式(如授权码模式),通常需要独立授权服务来统一处理令牌发放、刷新和状态维护和追踪等等这类授权中台能力,从而构建全链路的可信交互环境。
1.1 OAuth2.0授权是什么
授权方式
OAuth2.0有四种授权方式,分别是:授权码授权、隐式授权、资源拥有者密码凭证授权、客户端凭证授权。
本文简单介绍客户端凭证授权,和授权码授权2种方式。
OAuth2.0具体内容参见:https://datatracker.ietf.org/doc/rfc6749/
1️⃣客户端凭证
此种授权方式不涉及资源拥有者,客户端代表它自己来获取授权,授权时只需要提供客户端自己的凭证。
2️⃣授权码
此种授权方式需资源拥有者给第三方应用授权,第三方应用会预先给授权服务器提供一个重定向URL,第三方应用引导用户授权后,授权服务会重定向到第三方应用提供的重定向URL,并把授权码返回,第三方应用接收到授权码后,会调用授权服务器的接口,用授权码换取access token。
下图引用地址 : https://datatracker.ietf.org/doc/rfc6749/
(A)用户访问客户端,后者将前者导向认证服务器。
(B)用户选择是否给予客户端授权。
(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
(D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。
2-设计图举例
通过TOKEN系统,从而支持类似TOKEN这一类提供系统支持协助功能的中台系统或者服务;
- token授权能力:支持根据OAuth2.0协议定义的交互,取得授权(获得access token)和刷新access token。授权方式支持客户端凭证授权和授权码授权。
- token运维能力
支持access token的查询。主流程中在需要传递access token时,直接调接口查询。
支持access token的过期前主动刷新,以及主流程识别到access token过期后的被动刷新。 - token查询能力:查token基本信息,包括 token