diff --git a/sa-token-doc/_sidebar.md b/sa-token-doc/_sidebar.md index ee46f965..863cae57 100644 --- a/sa-token-doc/_sidebar.md +++ b/sa-token-doc/_sidebar.md @@ -115,7 +115,7 @@ - **框架设计** - [仓库目录](/arch/dir-intro) - + - [数据结构](/arch/data-structure) - **其它** @@ -140,7 +140,6 @@ - [数据读写三大作用域](/fun/three-scope) - [TokenInfo参数详解](/fun/token-info) - [异常细分状态码](/fun/exception-code) - - [数据结构](/fun/data-structure) - [自定义注解](/fun/custom-annotations) - [防火墙](/fun/firewall) - [参考:把权限放在缓存里](/fun/jur-cache) diff --git a/sa-token-doc/fun/data-structure.md b/sa-token-doc/arch/data-structure.md similarity index 62% rename from sa-token-doc/fun/data-structure.md rename to sa-token-doc/arch/data-structure.md index a2de3d8f..3d22bbf8 100644 --- a/sa-token-doc/fun/data-structure.md +++ b/sa-token-doc/arch/data-structure.md @@ -6,24 +6,20 @@ ### 1.1、token -> loginId 映射 ``` js -{tokenName}:{loginType}:token:{tokenValue} +// ttl = 此 token 的 timeout 有效期 +{tokenName}:{loginType}:token:{tokenValue} --> {loginId} ```
详细 -key 示例 (ttl 为 timeout 有效期值 ) +示例: ``` js -satoken:login:token:47ab0105-2be1-400c-b517-82f81a0cfcf8 -``` - - -正常 value 格式 -``` js -10001 loginId,登录id,一般为账号id +satoken:login:token:47ab0105-2be1-400c-b517-82f81a0cfcf8 --> 10001 ``` 异常 value 格式 + ``` js -1 未能从请求中读取到有效 token -2 已读取到 token,但是 token 无效 @@ -40,28 +36,27 @@ satoken:login:token:47ab0105-2be1-400c-b517-82f81a0cfcf8 ### 1.2、active-timeout ``` js -{tokenName}:{loginType}:last-active:{tokenValue} +// ttl = 对应 token 的 timeout 有效期值 +{tokenName}:{loginType}:last-active:{tokenValue} --> {13位时间戳} ```
详细 -key 示例 (key 的 ttl 为 timeout 有效期值 ) +示例: ``` js -satoken:login:last-active:06d1f12b-614e-4c00-8d8e-c07fef5f4aa9 +satoken:login:last-active:06d1f12b-614e-4c00-8d8e-c07fef5f4aa9 --> 1722334954193 ``` -value 格式 +value 格式分两种: ``` 1722334954193 // 单值时:此 token 最后访问日期 1722334954193, 1200 // 双值时:此 token 最后访问日期,此 token 指定的动态 active-timeout 值 ``` -active-timeout 判断方式: +注意:判断一个 token 是否 active-timeout 过期,与 ttl 无关,而是利 value 值计算: ``` js -当前时间 - token 最后访问时间 > active-timeout -返回 true: 此 token 已冻结 -返回 false:此 token 未冻结 +当前时间 - token 最后访问时间 > active-timeout (true=token 已冻结,false=token 未冻结 ) ```
@@ -71,9 +66,9 @@ active-timeout 判断方式: ### 1.3、SaSession ``` js -{tokenName}:{loginType}:session:{loginId} // Account-Session -{tokenName}:{loginType}:token-session:{loginId} // Token-Session -{tokenName}:custom:session:{sessionId} // Custom-Session +{tokenName}:{loginType}:session:{loginId} --> {SaSession 对象} // Account-Session +{tokenName}:{loginType}:token-session:{loginId} --> {SaSession 对象} // Token-Session +{tokenName}:custom:session:{sessionId} --> {SaSession 对象} // Custom-Session ```
@@ -139,14 +134,14 @@ value 格式 ### 1.4、二级认证 ``` js -{tokenName}:{loginType}:safe:{service}:{tokenValue} +{tokenName}:{loginType}:safe:{service}:{tokenValue} --> SAFE_AUTH_SAVE_VALUE ``` value 为常亮值:`SAFE_AUTH_SAVE_VALUE` ### 1.5、账号服务封禁 ``` js -{tokenName}:{loginType}:disable:{service}:{loginId} +{tokenName}:{loginType}:disable:{service}:{loginId} --> {level} ``` value 为封禁等级,int类型 @@ -157,19 +152,19 @@ SaApplication 全局变量 {tokenName}:var:{变量名} ``` -本次请求新创建 token,存储 key +本次请求新创建 token,在 SaStorage 存储 key ``` js -JUST_CREATED_ +JUST_CREATED_ --> {token} ``` -本次请求新创建 token,存储 key (无前缀方式) +本次请求新创建 token,在 SaStorage 存储 key (无前缀方式) ``` js -JUST_CREATED_NOT_PREFIX_ +JUST_CREATED_NOT_PREFIX_ --> {token} ``` 临时身份切换,使用的key ``` js -SWITCH_TO_SAVE_KEY_{loginType} +SWITCH_TO_SAVE_KEY_{loginType} --> {loginId} ``` @@ -177,23 +172,19 @@ SWITCH_TO_SAVE_KEY_{loginType} ### 2.1、ticket -> loginId 映射 ``` js -{tokenName}:ticket:{ticket} +// ttl = 此 ticket 有效期,下同理 +{tokenName}:ticket:{ticket} --> {loginId} ``` -值为 loginId - ### 2.2、ticket -> client 映射 ``` js -{tokenName}:ticket-client:{ticket} +{tokenName}:ticket-client:{ticket} --> {client} ``` -值为 client - -### 2.3、loginId -> ticket 映射(loginId 反查 ticket) +### 2.3、loginId -> ticket 映射(client + loginId 反查 ticket) ``` js -{tokenName}:id-ticket:{id} +{tokenName}:ticket-index:{client}:{loginId} --> {ticket} ``` -值为 ticket @@ -201,21 +192,21 @@ SWITCH_TO_SAVE_KEY_{loginType} ### 3.1、Code 授权码 ``` js -{tokenName}:oauth2:code:{code} +{tokenName}:oauth2:code:{code} --> {CodeModel 对象} ```
详细 -值为 CodeModel +value 示例: ``` js { - "@class": "cn.dev33.satoken.oauth2.model.CodeModel", // java class 信息 - "code": "AbRVp2HrgyklE0BXYWszskGJWAGY7xhGu6Zaco4zJECzGYagCCFWj0jOlHza", // code值 - "scope": "", // 所申请权限列表,多个用逗号隔开 - "loginId": "10001", // 对应的loginId - "redirectUri": "", // 重定向地址 + "@class": "cn.dev33.satoken.oauth2.model.CodeModel", // java class 信息 + "code": "AbRVp2HrgyklE0BXYWszskGJWAGY7xhGu6Zaco4zJECzGYagCCFWj0jOlHza", // code值 + "scope": "", // 所申请权限列表,多个用逗号隔开 + "loginId": "10001", // 对应的loginId + "redirectUri": "", // 重定向地址 } ``` @@ -223,20 +214,20 @@ SWITCH_TO_SAVE_KEY_{loginType} clientId + loginId 反查 code ``` js -{tokenName}:oauth2:code-index:{clientId}:{loginId} +{tokenName}:oauth2:code-index:{clientId}:{loginId} --> {code 值} ``` ### 3.2、Access-Token 资源令牌 ``` js -{tokenName}:oauth2:access-token:{accessToken} +{tokenName}:oauth2:access-token:{accessToken} --> {AccessTokenModel 对象} ```
详细 -值为 AccessTokenModel +value 示例: ``` js { @@ -277,19 +268,19 @@ clientId + loginId 反查 code clientId + loginId 反查 Access-Token ``` js -{tokenName}:oauth2:access-token-index:{clientId}:{loginId} +{tokenName}:oauth2:access-token-index:{clientId}:{loginId} --> {access_token 值} ``` ### 3.3、Refresh-Token 资源令牌 ``` js -{tokenName}:oauth2:refresh-token:{refreshToken} +{tokenName}:oauth2:refresh-token:{refreshToken} --> {RefreshTokenModel 对象} ```
详细 -值为 RefreshTokenModel +value 示例: ``` js { @@ -324,19 +315,19 @@ clientId + loginId 反查 Access-Token clientId + loginId 反查 Refresh-Token ``` js -{tokenName}:oauth2:refresh-token-index:{clientId}:{loginId} +{tokenName}:oauth2:refresh-token-index:{clientId}:{loginId} --> {refresh_token 值} ``` ### 3.4、Client-Token 应用令牌 ``` js -{tokenName}:oauth2:client-token:{clientToken} +{tokenName}:oauth2:client-token:{clientToken} --> {ClientTokenModel 对象} ```
详细 -值为 ClientTokenModel +value 示例: ``` js { @@ -368,19 +359,19 @@ clientId + loginId 反查 Refresh-Token clientId 反查 Client-Token ``` js -{tokenName}:oauth2:client-token-index:{clientId} +{tokenName}:oauth2:client-token-index:{clientId} --> {client_token 值} ``` Lower-Client-Token 次级应用令牌索引 ``` js -{tokenName}:oauth2:lower-client-token-index:{clientId} +{tokenName}:oauth2:lower-client-token-index:{clientId} --> {client_token 值} ``` ### 3.5、用户授权记录 ``` js -{tokenName}:oauth2:grant-scope:{clientId}:{loginId} +{tokenName}:oauth2:grant-scope:{clientId}:{loginId} --> {scope列表} ``` -值为 scope 列表,多个用逗号隔开 +值为 scope 列表,多个用逗号隔开,例如:`userinfo,openid,userid`。 @@ -388,21 +379,35 @@ Lower-Client-Token 次级应用令牌索引 ## 4、插件 ### 4.1、临时 token 会话 + +temp-token -> value + ``` js -{tokenName}:temp-token:{service}:{token} +// namespace 默认值为 "temp-token" +{tokenName}:{namespace}:{temp-token} --> {value} ``` +value 反查 temp-token + +``` js +{tokenName}:raw-session:{namespace}:{value} --> {Raw#SaSession 对象} +``` + +- 在 SaSession 以 `__HD_TEMP_TOKEN_MAP` 为 key 存储 temp-token 索引列表。值类型为 Map。 +- 其中:Map 的 key = temp-token 值,Map 的 value = 此 temp-token 到期时间戳。 + + ### 4.2、 Same-Token Same-Token ``` js -{tokenName}:var:same-token +{tokenName}:var:same-token --> {same-token 值} ``` Past-Same-Token ``` js -{tokenName}:var:past-same-token +{tokenName}:var:past-same-token --> {same-token 值} ``` @@ -410,9 +415,59 @@ Past-Same-Token 随机字符串 ``` js -{tokenName}:sign:nonce:{32位随机字符} +// nonce 值 默认为 32位随机字符 +{tokenName}:sign:nonce:{nonce} --> {nonce 值} ``` +### 4.4、API Key + +``` js +// namespace 默认值为 "apikey" (全小写), ttl = 此 API Key 剩余有效期 +{tokenName}:{namespace}:{apikey} --> {ApiKeyModel 对象} +``` + +
+详细 + +key 示例: + +``` js +satoken:apikey:AK-XCoJLP2E7Q9GXyPiiZWMM8Sqi6Fm0JoFC41R +``` + +value 示例: +``` js +{ + "@class": "cn.dev33.satoken.apikey.model.ApiKeyModel", // java class 信息 + "title": "test", // API Key 名称 + "intro": null, // 用途介绍 + "apiKey": "AK-XCoJLP2E7Q9GXyPiiZWMM8Sqi6Fm0JoFC41R", // API Key 值 + "loginId": "10001", // 所属用户 id + "createTime": 1766509019137, // 创建时间戳 + "expiresTime": 1769101019136, // 到期时间戳 + "isValid": true, // 是否有效 + "scopes": [ // 含有权限 + "java.util.ArrayList", + [ + "userinfo", + "user-update" + ] + ], + "extraData": null // 扩展数据:Map 类型 +} +``` + +
+ + +value 反查 API Key + +``` js +{tokenName}:raw-session:{namespace}:{value} --> {Raw#SaSession 对象} +``` + +- 在 SaSession 以 `__HD_API_KEY_LIST` 为 key 存储 API Key 索引列表。值类型为 List (API Key 列表)。 + diff --git a/sa-token-doc/arch/dir-intro.md b/sa-token-doc/arch/dir-intro.md index cd5574fa..18779415 100644 --- a/sa-token-doc/arch/dir-intro.md +++ b/sa-token-doc/arch/dir-intro.md @@ -1,6 +1,29 @@ # 仓库目录介绍 -仓库目录介绍: +--- + +### 1、仓库根目录介绍: + +``` js +── sa-token + ├── sa-token-core // [核心] Sa-Token 核心模块 + ├── sa-token-dependencies // [依赖] Sa-Token 依赖版本信息 + ├── sa-token-bom // [核心] Sa-Token bom 包 + ├── sa-token-starter // [整合] Sa-Token 与其它框架整合 + ├── sa-token-plugin // [插件] Sa-Token 插件合集 + ├── sa-token-demo // [示例] Sa-Token 示例合集 + ├── sa-token-test // [测试] Sa-Token 单元测试合集 + ├── sa-token-doc // [文档] Sa-Token 开发文档 + ├── pom.xml // [依赖] 顶级pom文件 + ├── LICENSE // 开源协议 + ├── mvn clean.bat // 一键 mvn clean 核心包+所有示例包 + ├── mvn test.bat // 一键单元测试 + ├── preview-doc.bat // 一键预览开发文档 + ├── README.md // 仓库自述文件 +``` + + +### 2、所有目录详细介绍: ``` js ── sa-token diff --git a/sa-token-doc/fun/auth-flow.md b/sa-token-doc/fun/auth-flow.md index f8c6c525..ae0f1b14 100644 --- a/sa-token-doc/fun/auth-flow.md +++ b/sa-token-doc/fun/auth-flow.md @@ -4,7 +4,7 @@ ### Sa-Token 功能结构图: -![sa-token-rz](https://oss.dev33.cn/sa-token/art/sa-token-js4.png 's-w') +![sa-token-rz](https://oss.dev33.cn/sa-token/art/sa-token-js4--2.png 's-w') ### Sa-Token 认证流程图: diff --git a/sa-token-doc/micro/same-token.md b/sa-token-doc/micro/same-token.md index 9b7b5efd..08e111b4 100644 --- a/sa-token-doc/micro/same-token.md +++ b/sa-token-doc/micro/same-token.md @@ -18,7 +18,7 @@ Sa-Token提供两种解决方案: 本篇主要讲解方案二 `Same-Token` 模块的整合步骤,其鉴权流程与 OAuth2.0 类似,不过使用方式上更加简洁(希望使用方案一的同学可参考Sa-OAuth2模块,此处不再赘述) -![子服务外网隔离.drawio.svg](https://oss.dev33.cn/sa-token/doc/micro/子服务外网隔离.drawio.svg 'w-100') +![Same-Token_同源系统认证---带动画.drawio.svg](https://oss.dev33.cn/sa-token/doc/micro/子服务外网隔离---带动画.drawio.svg 'w-100') ### 二、网关转发鉴权 @@ -206,7 +206,9 @@ Same-Token —— 专门解决同源系统互相调用时的身份认证校验 基本使用流程为:服务调用方获取 Same-Token,提交到请求中,被调用方取出 Same-Token 进行校验:如果一致则校验通过,否则拒绝服务。 -![Same-Token_同源系统认证.drawio.svg](https://oss.dev33.cn/sa-token/doc/micro/Same-Token_同源系统认证.drawio.svg 'w-100') +![Same-Token_同源系统认证---带动画.drawio.svg](https://oss.dev33.cn/sa-token/doc/micro/Same-Token_同源系统认证---带动画.drawio.svg 'w-100') + + 首先我们预览一下此模块的相关API: diff --git a/sa-token-doc/static/doc.css b/sa-token-doc/static/doc.css index b88930b3..6834c809 100644 --- a/sa-token-doc/static/doc.css +++ b/sa-token-doc/static/doc.css @@ -252,6 +252,13 @@ body{ [title=s-w-sh]{display: inline-block; border: 1px #eee solid;} [title=w-100]{display: inline-block; border: 1px #eee solid; max-width: 100%;} +/* 鼠标悬浮时切换img */ +.hover-change-img {border: 1px #eee solid; max-width: 100%; } +.hover-change-img:hover img:first-child{ display: none; } +.hover-change-img img:last-child{ display: none; } +.hover-change-img img:first-child{ display: inline-block; } +.hover-change-img:hover img:last-child{ display: inline-block; } + /* 公众号table */ .gzh-table{ /* table-layout:fixed !important; */} /* .gzh-table,.gzh-table tr,.gzh-table td{display: block !important;} */