> 演示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/> > 你也可以开放更多你自己业务的接口供第三方调用