[TOC]
## 一、登錄
```
http://127.0.0.1:8066
admin/admin
```
## 二、訪問后端api需帶上token
```
放header方式:
Authorization:Bearer xxx
?
放參數方式:
http://localhost:9900/api-user/users?access_token=xxx
```
## 三、后端api方法不做認證方式
```yml
zlt:
security:
? ignore:
httpUrls: '不想認證攔截的url'
```
## 四、獲取當前登錄人對象
在被 `access_token` 鑒權過的請求的任意層任意方法中使用
>[warning] 無論在 contoller、service 或者 dao 層使用該方法都可以,需要服務滿足以下兩個條件:
> 1. 服務依賴 zlt-common-spring-boot-starter
> 2. 請求的入口方法需要鑒權
### 4.1. 方法一獲取基本信息
```java
SysUser user = LoginUserContextHolder.getUser()
```
### 4.2. 方法二獲取全部信息
```java
SysUser user = LoginUserUtils.getCurrentSysUser()
```
## 五、獲取當前登錄的租戶
```java
//例子:
String tenantId = TenantContextHolder.getTenant();
```
## 六、token類型切換

## 七、無網絡隔離的系統環境下認證修改
* 因為當前的代碼是api網關統一認證的架構,適配有網絡隔離的環境下使用
* 而如果無網絡隔離的環境下代碼需求進行調整,將api網關的認證相關內容移去各個微服務里,架構可參考 [無網絡隔離認證設計](http://www.hmoore.net/zlt2000/microservices-platform/1153640)

具體步驟:
### 7.1. 把一下內容從api網關移去各個微服務里:
* `zlt-auth-client-spring-boot-starter` jar包依賴
* `ResourceServerConfiguration` 資源服務配置
* 刪除`UserInfoHeaderFilter`類
* 配置文件里面認證相關配置

* `pubkey.txt`公鑰
## 八、token自動續簽
* 目前續簽功能只支持`redis token`模式,請先確保授權服務器和認證服務器的`zlt.oauth2.token.store.type=redis`
* **認證服務器**開啟自動續簽功能`zlt.security.auth.renew.enable=true`
* 白名單與黑名單功能是**非必填項**,不配置默認所有應用的token都會續簽

>[info]自動續簽原理:[系統設計-認證設計-token自動續簽設計](http://www.hmoore.net/zlt2000/microservices-platform/1165104)
## 九、url級權限
該功能默認關閉,開啟需要在網關添加url權限相關配置

### 9.1. 打開網關認證配置
`zlt.security.auth.urlPermission.enable`設置為`true`
### 9.2. 配置只認證登錄,登錄后所有角色都能訪問的url(可選項)
`zlt.security.auth.urlPermission.ignoreUrls`
### 9.3. 配置白名單/黑名單(可選項)
`zlt.security.auth.urlPermission.includeClientIds`
`zlt.security.auth.urlPermission.exclusiveClientIds`
詳情查看:[url級權限控制](http://www.hmoore.net/zlt2000/microservices-platform/1202397)
## 十、登錄同應用同賬號互踢
實現了在同一個應用id下,不同的瀏覽器使用相同的用戶名登錄,相互互踢。
在 `zlt-uaa` 中通過參數 `isSingleLogin` 來配置是否開啟功能,默認為 `false` 為可以同時登錄,改為 `true` 則會互踢
```yaml
zlt:
security:
auth:
isSingleLogin: true
```
## 十一、單點登錄與單點登出
在 `zlt-uaa` 工程中通過參數 `unifiedLogout` 來配置是否開啟單點登出功能,默認為 `false`
```yaml
zlt:
security:
auth:
unifiedLogout: true
```
### 11.1. demo樣例
- **zlt-demo\ss-sso**:使用springSecurity來實現自動單點登錄,非前后端分離
- **zlt-demo\web-sso**:前后端分離的單點登錄與單點登出
- **zlt-demo\oidc-sso**:擁有獨立用戶體系的系統,使用OIDC協議的單點登錄與單點登出
### 11.2. 相關文章
- [單點登錄詳解](http://www.hmoore.net/zlt2000/microservices-platform/2278849)
- [前后端分離的單點登錄](http://www.hmoore.net/zlt2000/microservices-platform/2278850)
- [OIDC協議單點登錄](http://www.hmoore.net/zlt2000/microservices-platform/2278851)
- [單點登出詳解](http://www.hmoore.net/zlt2000/microservices-platform/2539642)
## 十二、手動token鑒權工具
`zlt-auth-client-spring-boot-starter` 依賴只會對 `http` 請求進行攔截鑒權。
對于其他協議如 `webSocket`、`dubbo`、`MQ`等如果需要進行 token 鑒權,可手動使用以下方法:
```java
SysUser user = AuthUtils.checkAccessToken(String accessTokenValue)
```
## 十三、數據權限
在服務的 `application.yml` 配置中添加以下內容:
```yml
zlt:
datascope:
# 開啟數據權限,默認為 false
enabled: true
```
詳細說明請看:[數據權限](http://www.hmoore.net/zlt2000/microservices-platform/2278849)
- 項目介紹
- 項目聲明
- 項目簡介
- 核心功能
- 運行環境
- 項目更新日志
- 文檔更新日志
- 分支說明
- F&Q
- 部署教程
- 環境準備
- 必要啟動模塊
- 擴展模塊(可選)
- 打包工程
- 開發說明
- 登錄認證
- 基礎功能
- 分布式功能
- Spring Boot自定義配置自動提示
- 如何新增一個服務
- 自定義配置參數清單
- 公共配置
- 授權認證中心
- 日志中心
- 搜索中心
- 文件中心
- 核心接口
- 密碼模式授權
- 授權碼模式授權
- 簡化模式授權
- 客戶端模式授權
- 手動刷新token
- 用戶名+密碼+驗證碼授權
- openId授權
- 手機號+密碼授權
- 賬號登出接口
- 檢查token有效性
- OIDC模式授權
- 獲取JWT公鑰
- 系統設計
- 企業級微服務總體分層架構圖
- 企業級服務認證架構設計
- 有網絡隔離
- 無網絡隔離V1
- 無網絡隔離V2
- url級權限控制
- 多用戶類型擴展
- WebSocket接口鑒權
- 授權參數加密
- 兼容舊的密碼加密方式
- 數據權限
- 企業級日志解決方案設計
- 企業級監控架構設計(Metrics)
- 框架技術選型
- 架構設計方法論思維導圖
- 系統冪等性設計與實踐
- 分布式ID生成器解決方案
- 實時搜索系統設計
- 企業級功能
- alibaba/nacos注冊中心
- 介紹與相關資料
- 設計模型
- 部署
- 配置中心
- 服務注冊發現
- 生產部署方案
- 通過Nginx來實現環境隔離
- 統一日志中心詳解
- 介紹與相關資料
- docker安裝部署
- 安裝包部署(6.x版本)
- elasticsearch 6.x
- logstash 6.x
- kibana 6.x
- 安裝包部署(7.x版本+xpack)
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- Filebeat安裝部署
- ES索引管理
- 定時任務定期刪除
- Index Lifecycle Management
- 沒數據問題排查思路
- Logstash
- Grok語法調試
- Grok常用表達式
- 配置語法中的條件判斷
- ELK自身各組件監控
- ELK多租戶方案
- 慢查詢sql詳解
- 審計日志-elk詳解
- alibaba/sentinel限流熔斷
- 介紹與相關資料
- 使用示范
- 動態規則擴展
- 生產應用
- 網關流控
- JWT的RSA非對稱密鑰生成
- Docker
- 安裝(外網)
- 安裝(內網)
- 構建項目鏡像(免Dockerfile文件)
- APM監控-SkyWalking
- 介紹與相關資料
- APM系統簡單對比(zipkin,pinpoint和skywalking)
- server安裝部署
- agent安裝
- 日志信息清理
- Metrics監控
- 介紹與相關資料
- 安裝部署
- 各組件監控
- Grafana儀表盤模板下載
- Grafana告警配置
- 分布式事務
- 基礎概念和理論
- TX-LCN(同步場景)
- SEATA(同步場景)(v1.3)
- RocketMQ(異步場景)
- MySQL
- 主從復制
- 主從切換
- 主主復制
- 高可用方案
- Redis
- 單機
- 主從復制
- 主從復制+哨兵
- cluster集群
- 持久化方案
- 數據庫之分庫分表
- 分庫分表思路
- 分庫分表部署上線方式
- ShardingSphere配置
- 消息隊列
- 消息隊列對比參照表
- Spring-Cloud-Stream消息框架
- RocketMQ
- 介紹與相關資料
- 安裝部署
- 常見異常處理
- RocketMQ事務消息原理
- Kafka
- 介紹與相關資料
- 應用場景
- 安裝部署
- 集群部署
- Kafka Connect
- 分布式文件系統
- FastDFS
- 介紹與相關資料
- 特性詳解
- 文件系統的對比
- 安裝部署
- MinIO
- Canal數據庫日志解析消費
- 介紹與相關資料
- 安裝部署
- 高可用架構部署
- 實時同步數據到ElasticSearch
- 全量同步數據到ElasticSearch
- 多租戶(應用隔離)
- 技術介紹與隔離方案
- 本項目實現詳解
- 分布式日志鏈路跟蹤
- 單點登錄
- 單點登錄詳解
- 前后端分離的單點登錄
- OIDC協議單點登錄
- 單點登出詳解
- Zookeeper集群搭建
- Spring
- 升級 Spring Boot 2.5 與 Spring Cloud 2020 注意要點
- 企業開發環境搭建
- 研發項目管理軟件(禪道)
- Maven私服
- 安裝部署
- 使用介紹
- Docker私有鏡像倉庫
- 安裝部署
- 使用介紹
- 容器管理平臺
- 介紹與相關資料
- 安裝部署
- 使用介紹
- 持續集成部署CICD
- 持續交付的含義
- 影響持續交付的因素
- 代碼分支策略選擇
- CICD流程設計
- 代碼倉庫Gitlab
- 安裝部署
- 免密訪問
- webhook配置
- 自動化部署Jenkins
- 安裝部署
- ssh免密登錄
- 流水線簡單例子
- 流水線參數化構建例子
- 靜態代碼測試SonarQube
- 應用性能
- 壓力測試工具
- 介紹和安裝
- 使用介紹
- JVM
- JVM性能調優
- 常見JVM內存錯誤及解決方案
- JVM 分析工具詳解
- Spring Cloud性能調優
- Elasticsearch性能優化
- 我的GitChat
- Spring Boot集成Elasticsearch7.x詳解
- 微服務統一日志方案ELK7.x落地實戰
- Redisson 分布式鎖詳解與可視化監控方案
- 交流反饋
- 云服務器購買優惠