应用授权

概述

  • 1、用户对开发者进行应用授权后,开发者可以帮助用户完成相应的业务逻辑。
  • 2、授权采用标准的OAuth 2.0流程。

授权流程

授权流程

快速接入

  • 第一步:应用授权URL拼装

拼接规则:

http://openauth.yourdomain.com/oauth2/appToAppAuth?app_id=2019032617262200001&redirect_uri=http%3a%2f%2flocalhost%3a8087%2foauth2callback

参数说明:

参数 参数名称 类型 必填 描述 范例
app_id 开发者应用的AppId String 开发者应用的AppId 2015101400446982
redirect_uri 回调页面 String 参数需要UrlEncode http%3A%2F%2Fexample.com
  • 第二步:获取code

授权成功后,会跳转至开发者定义的回调页面(即redirect_uri参数对应的url),在回调页面请求中会带上当次授权的授权码code和开发者的app_id,示例如下:

http://www.xxx.com/oauth2callback?app_id=2015101400446982&code=ca34ea491e7146cc87d25fca24c4cD11

  • 第三步:使用code换取app_auth_token

接口名称:open.auth.token.app

开发者通过code可以换取app_auth_token、授权用户的userId。

注意:应用授权的code唯一,code使用一次后失效,有效期24小时; app_auth_token永久有效。

请求参数说明

参数 参数名称 类型 必填 描述 范例
grant_type 授权类型 String 如果使用code换取token,则为authorization_code,如果使用refresh_token换取新的token,则为refresh_token authorization_code
code 授权码 String 与refresh_token二选一,用户对应用授权后得到,即第一步中开发者获取到的code值 bf67d8d5ed754af297f72cc482287X62
refresh_token 刷新令牌 String 与code二选一,可为空,刷新令牌时使用 201510BB0c409dd5758b4d939d4008a525463X62

接口请求SDK示例

  1. @GetMapping("oauth2callback")
  2. @ResponseBody
  3. public String callback(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
  4. String app_id = servletRequest.getParameter("app_id");
  5. String code = servletRequest.getParameter("code");
  6. OpenAuthTokenAppRequest request = new OpenAuthTokenAppRequest();
  7. OpenAuthTokenAppModel model = new OpenAuthTokenAppModel();
  8. model.setCode(code);
  9. model.setGrant_type("authorization_code");
  10. request.setBizModel(model);
  11. // 根据code获取token
  12. OpenAuthTokenAppResponse response = openClient.execute(request);
  13. if (response.isSuccess()) {
  14. // 成功拿到token,开发者在这里保存token信息
  15. // 后续使用token进行接口访问
  16. log.info("授权成功,body:{}", response.getBody());
  17. }
  18. return response.getBody();
  19. }

同步响应参数说明

参数 参数名称 类型 必填 描述 范例
app_auth_token 用户授权令牌 String 通过该令牌来帮助用户发起请求,完成业务 856faf8d77d3b985c1073557ce6ea724
user_id 授权用户的ID String 授权者id 1
expires_in 令牌有效期 Long 负值表示永久有效 -1
re_expires_in 刷新令牌有效期 Long 负值表示永久有效 -3
app_refresh_token 刷新令牌时使用 String 刷新令牌后,我们会保证老的app_auth_token从刷新开始10分钟内可继续使用,请及时替换为最新token 88e68196d2359667f0dc8136e6c86803

同步响应结果示例

  1. {
  2. "open_auth_token_app_response": {
  3. "code": "10000",
  4. "msg": "Success",
  5. "app_auth_token": "88e68196d2359667f0dc8136e6c86803",
  6. "app_refresh_token": "856faf8d77d3b985c1073557ce6ea724",
  7. "expires_in": -1,
  8. "re_expires_in": -3,
  9. "user_id": "1"
  10. },
  11. "sign": "xxx"
  12. }

刷新token

  1. OpenAuthTokenAppRequest request = new OpenAuthTokenAppRequest();
  2. OpenAuthTokenAppModel model = new OpenAuthTokenAppModel();
  3. model.setGrant_type("refresh_token");
  4. model.setRefresh_token("856faf8d77d3b985c1073557ce6ea724");
  5. request.setBizModel(model);
  6. OpenAuthTokenAppResponse response = openClient.execute(request);
  7. if (response.isSuccess()) {
  8. // 成功拿到token,开发者在这里保存token信息
  9. // 后续使用token进行接口访问
  10. log.info("换取token成功,body:{}", response.getBody());
  11. }