> 演示Demo站點 http://sso.exrick.cn
### 準備工作
- 進入系統“開放平臺-接入網站管理”菜單,添加要接入的第三方網站,獲得相應的clientId和clientSecret
### 授權流程簡介
- 時序圖
<img src=https://ooo.0o0.ooo/2019/11/26/zoKNi1ZsWkw4g6O.png width=800/>
- 對于第三方應用簡而言之即兩步
1. 獲取 Code
2. 通過 Code 獲取 Access Token
### 流程詳解
#### 第一步:獲取 Code
**請求地址**:
本地運行前端:http://127.0.0.1:9999/authorize
在線Demo: http://xboot.exrick.cn/authorize
**請求方法**:
GET
**請求參數**:
| 參數 | 是否必須 | 含義 |
| --- | --- | --- |
| response\_type | 必須 | 授權類型,此值固定為“code”。 |
| client\_id | 必須 | 接入成功后,分配給應用的clientId。 |
| redirect\_uri | 必須 | 成功授權后的回調地址,必須是接入時填寫的地址,建議設置為網站首頁或網站的用戶中心。建議將url進行URLEncode。 |
| state | 必須 | client端的狀態值。用于第三方應用防止CSRF攻擊,成功授權后回調時會原樣帶回。請務必嚴格按照流程檢查用戶與state參數狀態的綁定。 |
**真實鏈接示例**
http://xboot.exrick.cn/authorize?client_id=211260981215498241&redirect_uri=http://sso.exrick.cn&state=1234&response_type=code
**返回說明**:
1. 如果用戶成功登錄并授權,則會跳轉到指定的回調地址,并在redirect\_uri地址后帶上code和原始的state值。如回調地址示例:
PC網站:http://demo.cn/callback?code=9A5F\*\*\*\*\*06AF&state=1234
注意:此code會在5分鐘內過期。
#### 第二步:通過Code獲取Access Token
**請求地址**:
本地運行后端:http://127.0.0.1:8888/xboot/oauth2/token
在線Demo: http://xboot.exrick.cn/xboot/oauth2/token
**請求方法**:
GET
**請求參數**:
| 參數 | 是否必須 | 含義 |
| --- | --- | --- |
| grant\_type | 必須 | 授權類型,在本步驟中,此值為“authorization\_code”。 |
| client\_id | 必須 | 接入成功后,分配給應用的clientId。 |
| client\_secret | 必須 | 接入成功后,應用填寫的clientSecret。 |
| code | 必須 | 上一步返回的code。 如果用戶成功登錄并授權,則會跳轉到指定的回調地址,并在URL中帶上Code。例如,回調地址為demo.com/callback,則跳轉到:http://demo.com/callback?code=520D\*\*\*\*\*\* 注意此code會在5分鐘內過期。 |
| redirect\_uri | 必須 | 與上面一步中傳入的redirect\_uri保持一致。 |
**返回說明**:
如果成功返回,即可在返回包中獲取到Access Token。 如:
``` json
{
"success": true,
"message": "success",
"code": 200,
"timestamp": 1574751441247,
"result": {
"access_token": "a4d75327ec5e4b96bfd244bf73afb79a",
"refresh_token": "b8ee0d83b5d14ec68505047063807e78",
"expires_in": 2591009
}
}
```
| **參數說明** | **描述** |
| --- | --- |
| access\_token | 授權令牌,Access\_Token。 |
| expires\_in | 該access token的有效期,單位為秒。 |
| refresh\_token | 在授權自動續期步驟中,獲取新的Access\_Token時需要提供的參數。
注:refresh\_token僅一次有效
<img src=https://ooo.0o0.ooo/2019/11/26/ro3OyZd4LSmNRgt.png width=800/>
#### (可選步驟)權限自動續期,獲取Access Token
Access\_Token的有效期默認是1個月,過期后需要用戶重新授權才能獲得新的Access\_Token。本步驟可以實現授權自動續期,避免要求用戶再次授權的操作,提升用戶體驗。
**請求地址**:
本地運行后端:http://127.0.0.1:8888/xboot/oauth2/token
在線Demo: http://xboot.exrick.cn/xboot/oauth2/token
**請求方法**:
GET
**請求參數**:
| 參數 | 是否必須 | 含義 |
| --- | --- | --- |
| grant\_type | 必須 | 授權類型,在本步驟中,此值為“refresh\_token”。 |
| client\_id | 必須 | 接入成功后,分配給應用的clientId。 |
| client\_secret | 必須 | 接入成功后,應用填寫的clientSecret。 |
| refresh\_token | 必須 | 首次:使用在【第二步】中獲取到的最新的refresh\_token。后續:使用刷新后返回的最新refresh\_token |
**返回說明**:
如果成功返回,即可在返回包中獲取到Access Token。 如同上一步即【第二步】
| **參數說明** | **描述** |
| --- | --- |
| access\_token | 授權令牌,Access\_Token。 |
| expires\_in | 該access token的有效期,單位為秒。 |
| refresh\_token | 在授權自動續期步驟中,獲取新的Access\_Token時需要提供的參數。每次生成最新的refresh\_token,且僅一次有效 |
### 請求開放接口
獲取了Accees_Token后即可用于請求XBoot平臺開放的接口,目前僅有獲取授權用戶基本信息接口
**請求地址**:
本地運行后端:http://127.0.0.1:8888/xboot/oauth2/user
在線Demo: http://xboot.exrick.cn/xboot/oauth2/user
**請求方法**:
GET
**請求參數**:
| 參數 | 是否必須 | 含義 |
| --- | --- | --- |
| access\_token | 必須 | 在【第二步】中獲取到的最新的access\_token。 |
**返回說明**
``` json
{
"success": true,
"message": "success",
"code": 200,
"timestamp": 1574751447930,
"result": {
"sex": "男",
"avatar": "https://s1.ax1x.com/2018/05/19/CcdVQP.png",
"username": "admin"
}
}
```
<img src=https://ooo.0o0.ooo/2019/11/26/xsGI4bSTRV7oH3U.png width=800/>
> 你也可以開放更多你自己業務的接口供第三方調用
- 前言&版本說明
- 概念
- XBoot 是什么?
- 系統架構
- 主要使用的開源組件
- 角色控制訪問權限(RBAC)
- 用戶手冊
- 系統配置
- 工作流使用配置
- 定時任務調度
- 智能助手客服機器人
- 項目本地運行
- 后端運行
- 前端運行
- 項目結構說明
- 附:使用Oracle等數據庫
- 模塊化版本
- 后端開發指南
- 基本開發指南
- 前后端數據交互標準
- 工具類及數據權限
- 代碼生成器-30秒搞定CRUD
- 增刪改查CRUD
- 日志類型注解擴展
- 邏輯刪除
- 各驗證碼使用及配置
- 接口文檔使用及認證
- 前端開發指南
- 基本開發指南
- 主題/Logo/首頁等配置
- 路由菜單配置
- 多語言國際化配置
- 自定義圖標icon
- 工具類及數據獲取
- 其他說明
- 完整版開發指南
- 前端Vue代碼生成器
- Activiti工作流
- 單點登錄配置
- 智能助手/客服機器人
- MinIO對象存儲服務搭建
- 第三方社交賬號配置
- 短信開發/站內消息/郵件
- Vaptcha驗證碼
- 禁用詞使用
- 前端移除CDN
- 其他說明
- 開放平臺及單點登錄
- 開放平臺使用指南
- Web接入開發流程
- 單點登錄開發指南
- 微信小程序端開發指南
- 項目導入與開發必讀
- 業務組件
- 產品組件(小)
- 產品組件(大)
- 優惠券組件
- 評論列表組件
- 紅包組件
- 推薦商品組件
- 頁面設計
- 商品詳情頁及SKU設計
- 通用方法工具類說明
- 開發經驗與踩坑分享
- Uniapp端開發指南
- APP后端開發指南
- Uniapp前端開發指南
- 開發新功能示例
- 后端開發新模塊
- 前端開發新頁面
- 測試
- SonarQube代碼質量管理
- TestNG單元測試
- ExtentReports測試報告
- Selenuim自動化Web測試
- Appuim自動化App測試
- JMeter壓測性能測試
- 部署
- Spring Boot配置
- 快速部署
- 后端部署
- 前端部署
- 前端部署優化
- Docker容器化部署
- 服務器配置
- 持續集成
- GitLab
- GitLab CI
- XBoot 腳本參考
- Jenkins
- Jenkins安裝
- XBoot CI參考
- DevOps環境搭建
- 組件安裝列表
- 開發設計規范
- 分支管理
- 數據庫設計規范
- Redis使用規范
- Java基礎開發規范
- Rest API規范
- 項目結構規范
- 前端開發規范
- 前端設計規范
- 項目搭建分享
- 后端相關
- SpringBoot 2.x區別總結
- Spring Security整合JWT
- Spring Security動態權限管理
- Spring Boot 2.x整合Quartz
- Spring Boot 2.x整合Websocket
- Spring Boot 2.x整合Activiti工作流以及模型設計器
- Spring Boot + Security全局跨域配置
- 前端相關
- axios請求封裝 統一異常處理
- 動態路由菜單加載
- 多維度控制權限至按鈕顯示
- 發送消息圖標紅點實時顯示
- 動態組件單頁操作
- XBoot助你【告別996】
- 業務開發踩坑
- 你會用開發神器IDEA嗎
- Lombok你知道多少
- 你還在手動校驗參數嗎
- 你真的會用JPA嗎
- Lamda表達式
- Stream流式API
- 告別資源關閉
- Optional避免null
- 谷歌Guava工具包
- 線程池
- 其他小經驗技巧
- 更新日志及步驟
- 常見問題