## 目前主要支持的oauth协议

### 一、 密码模式
密码模式(password)主要针对自家应用，可信度较高，所以可以使用简便安全共存的模式，操作步骤如下
1. 调用 http://localhost/blade-auth/oauth/token 传入对应的参数

* 请求头：
`Tenant-Id`:`000000`(替换为对应的租户id)
`Authorization ： Basic c3dvcmQ6c3dvcmRfc2VjcmV0` （"c3dvcmQ6c3dvcmRfc2VjcmV0"为clientId:clientSecret串转换为的base64编码,需要和`blade_client`表的对应字段相匹配）
![](../../images/screenshot_1559032174304.png)    

* 表单：
`grant_type`：`password
`
`scope`：`all
`
`username`：`admin
`
`password`：`21232f297a57a5a743894a0e4a801fc3
`

* 注意：其中的`sword`和`sword_secret`分别是`blade_client`表`client_id`和`client_secret`字段值，请一一对应。

* 注意：框架对密码进行了**二次加密**，由前端调用传参需要现将原密码进行**md5**加密后再进行传递，原密码是`admin`，所以md5加密后是`21232f297a57a5a743894a0e4a801fc3`，具体如下
![](../../images/screenshot_1584615713114.png)

2. 若想避免填写错误，快速导入参数，可以参考这个帖子：[https://sns.bladex.vip/article-14982.html](https://sns.bladex.vip/article-14982.html)




#### 调用认证接口返回结果
![](../../images/screenshot_1574305684211.png)
![](../../images/screenshot_1584617184986.png)
![](../../images/screenshot_1584617205489.png)




### 二、刷新token
刷新token(refresh_token)存在时间会比access_token更长，主要用于access_token快过期的时候，调用oauth接口获取到刷新后的token以达到token续期的目的
1. 调用 http://localhost/blade-auth/oauth/token 传入对应的参数
* 请求头：
 `Tenant-Id`:`000000`(替换为对应的租户id)
`Authorization ： Basic c3dvcmQ6c3dvcmRfc2VjcmV0` （"c3dvcmQ6c3dvcmRfc2VjcmV0"为clientId:clientSecret串转换为的base64编码）

* 表单：
`grant_type`：`refresh_token`
`scope`：`all
`
`refresh_token`: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZXN0IjoidGVzdCIsInVzZXJfbmFtZSI6ImFkbWluIiwic2NvcGUiOlsiYWxsIl0sImV4cCI6MTU1MzE2MTA5NSwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjE0YmMyYjAyLTgxY2UtNDFiNC04ZTI3LTA5YWE0ZmU4ZWMwYyIsImNsaWVudF9pZCI6ImJsYWRlIn0.jTmioQDq-fSNNn7YCwl3wP0JE-etSWtzLDe545mDbP4
`

 ### 三、 授权码模式
授权码模式(authorization_code)主要针对第三方应用，是最为复杂也最为安全的一种模式，操作步骤如下
1. 打开浏览器访问如下地址：http://localhost:8100/oauth/authorize?tenant_id=000000&client_id=sword&redirect_uri=http://localhost:8888&code=233333&response_type=code
2. 输入用户名为`admin`，密码为md5(admin)也就是上文提到的`21232f297a57a5a743894a0e4a801fc3`
![](../../images/screenshot_1584617264880.png)
3. 点击Authorize按钮，通过授权
![](../../images/screenshot_1584617280348.png)
4. 系统自动跳转至http://localhost:8888并加上了code参数
![](../../images/screenshot_1584617315712.png)
5. 获取跳转后的code值(http://localhost:8888/?code=VhYNLR)之后，调用 http://localhost/blade-auth/oauth/token 传入对应的参数

* 请求头：
 `Tenant-Id`:`000000`(替换为对应的租户id)
`Authorization ： Basic c3dvcmQ6c3dvcmRfc2VjcmV0` （"c3dvcmQ6c3dvcmRfc2VjcmV0"为clientId:clientSecret串转换为的base64编码,需要和`blade_client`表的对应字段相匹配）
![](../../images/screenshot_1559032174304.png)    
* 表单：
`grant_type`：`authorization_code
`
`scope`：`all
`
`code`：`VhYNLR
`
`redirect_uri`： `http://localhost:8888
` 
* 注意：
其中的`sword`和`sword_secret`分别是`blade_client`表`client_id`和`client_secret`字段值，请一一对应。
其中的`http://localhost:8888`是`blade_client`表的`web_server_redirect_uri`字段值，也请一一对应。

### 四、获取到token后如何获取用户信息
1. 拼接请求头
`Authorization ：bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZXN0IjoidGVzdCIsInVzZXJfbmFtZSI6ImFkbWluIiwic2NvcGUiOlsiYWxsIl0sImV4cCI6MTU1MzE2MTA5NSwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjE0YmMyYjAyLTgxY2UtNDFiNC04ZTI3LTA5YWE0ZmU4ZWMwYyIsImNsaWVudF9pZCI6ImJsYWRlIn0.jTmioQDq-fSNNn7YCwl3wP0JE-etSWtzLDe545mDbP4
`
2. 调用 http://localhost/blade-auth/oauth/user-info 既可获得对应用户信息




