自然语言处理:安全验证:鉴权认证机制

鉴权认证机制

本文档主要针对HTTP API调用者,调用API时必须在URL中带上token参数,获取token的流程如下: 向授权服务地址https://console.ditingai.com/auth-center/oauth/client/credentials发送请求(POST),并在URL中带上以下参数:

  • clientId: 必须参数,应用的API ID;
  • clientSecret: 必须参数,应用的API Secret;

例如: https://console.ditingai.com/api/auth-center/oauth/client/credentials?clientId=78s153e-5889-4129&clientSecret=f7529dfb-3c96-4820-c14d-fba8s05bbrre

  public static String getAuth() {
      // 官网获取的 APP Key 更新为你注册的
      String clientId = "应用的AK";
      // 官网获取的 Secret Key 更新为你注册的
      String clientSecret = "应用的SK";
      return getAuth(clientId, clientSecret);
  }
  /*
   * 获取API访问token
   * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
   * @param ak - 官网获取的 API Key
   * @param sk - 官网获取的 Securet Key
   * @return token 
   */
  public static String getAuth(String ak, String sk) {
      // 获取token地址
      String authHost = "https://console.ditingai.com/api/auth-center/oauth/client/credentials?";
      String getTokenUrl = authHost
              // 1. 官网获取的 API Key
              + "&clientId=" + ak
              // 2. 官网获取的 Secret Key
              + "&clientSecret=" + sk;
      try {
          URL realUrl = new URL(getTokenUrl);
          // 打开和URL之间的连接
          HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
          connection.setRequestMethod("POST");
          connection.connect();
          // 获取所有响应头字段
          Map<String, List<String>> map = connection.getHeaderFields();
          // 遍历所有的响应头字段
          for (String key : map.keySet()) {
              System.err.println(key + "--->" + map.get(key));
          }
          // 定义 BufferedReader输入流来读取URL的响应
          BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
          String result = "";
          String line;
          while ((line = in.readLine()) != null) {
              result += line;
          }
          /**
           * 返回结果示例
           */
          System.err.println("result:" + result);
          JSONObject jsonObject = new JSONObject(result);
          String token = jsonObject.getString("token");
          return token;
      } catch (Exception e) {
          System.err.printf("获取token失败!");
          e.printStackTrace(System.err);
      }
      return null;
  }

服务器返回的JSON文本参数如下:

  • token:要获取的Token;
  • expiration:Token的有效期(秒为单位);
  • tokenType:Token的前缀(固定参数,请求时拼接在token前面);
  "msg": "success",
  "code": 200,
  "data": {
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50X2lkIjoiMSIsImFwcF9rZXkiOiJ0ZjQ3cjJrb3kzNSIsInNjb3BlIjpbImFsbCJdLCJleHRfbmFtZSI6ImxpdWZlaSIsImRpdGluZ191c2VybmFtZSI6ImxpdWZlaSIsImV4cCI6MTU2Mzc5ODk0NywiY2xpZW50X25hbWUiOiI3OGY0MTUzZi01ODg5LTQ1NTkiLCJqdGkiOiJmOTIyZjBlYS0yMmEzLTRlMmYtYTNmMS0yODRlZTY3ZGE4MGUiLCJjbGllbnRfaWQiOiI3OGY0MTUzZi01ODg5LTQ1NTkifQ.EoZq-tPrwaArUg4YcsZoZYiiT0uIMjmXJDsVeCwKUb0",
      "expiration": "35998",
      "tokenType": "bearer"
  }

若请求错误,服务器将返回的JSON文本包含以下参数:

  • code: 错误码。
  • msg: 错误描述信息,帮助理解和解决发生的错误。

例如认证失败返回:

  "msg": "clientId or clientSecret invalid",
  "code": 40012
  • 自然语言处理/安全验证/鉴权认证机制.txt
  • 最后更改: 2019/07/23 09:41
  • 由 diting01