## 目前主要支持的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 既可获得对应用户信息