> 演示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工具包
- 线程池
- 其他小经验技巧
- 更新日志及步骤
- 常见问题