用户账号OA SDK

更新时间:2020-03-13 10:13:54

OA SDK基于Oauth2.0协议,提供快速对接自有账号体系的能力,满足开发者在web应用开发中的账号对接需求。

名词

oauthAppKey 阿里云IoT平台颁发的appkey,参考创建应用组和应用
authCode 开发者服务器签发的一次性校验码
iotToken 访问IoT平台的凭证
identityId 访问IoT平台的身份Id

接入

下载SDK

下载地址

准备环境

在接入账号前,请先设置好环境信息。
参考自有账号体系配置

前置依赖

  1. 在pom.xml中添加依赖:
<dependency>
    <groupId>com.aliyun.api.gateway</groupId>
    <artifactId>sdk-core-java</artifactId>
    <version>1.1.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.52</version>
</dependency>
  1. 引入API接口调用类

把工程中所有的api类OpenAccount_https_serviceApi.java文件复制到您的项目文件夹中;

  1. 初始化通信通道类

要提交请求至阿里云API网关,您首选要将所有的通道类初始化。您可以参考工程中 OAuthDemo.java中的示例代码,使用对应的ClientBuilderParams类来初始化所有通道

接入总体流程

image.png

其中第3步的配置信息依赖开发者注册到IoT平台的配置,具体说明:自有账号体系配置

流程说明

  1. 三方账号自己登陆自己的服务器,拿到自己服务器签发的authcode;
  2. 调用loginByOauth,通过授权方式去isv服务器做校验,并拿到用户的信息;
  3. loginByOauth成功后会颁发token, 拿token再调用createSessionByAuthCode获得IoT平台的登录态信息。

loginByOauth调用说明

参考工程中OAuthDemo.java中的示例代码testALoginByOauthSync。
loginByOauthRequest参数的是JSON格式转义为字符串的形式,如下:

"{

\"authCode\":\"2c7360fa72f**9527testtest\",

\"oauthAppKey\":\"501709*11922\",

\"oauthPlateform\":23,

\"riskControlInfo\":{

\"signType\":\"RSA2\",

\"createAccountIfNotExist\":\"true\"

}

}"

参数说明

  • authCode:服务器签发的一次性校验码

  • oauthAppKey:阿里云IoT平台颁发的appkey

  • oauthPlateform:固定填23

  • riskControlInfo:风险控制信息,固定signType=RSA2, createAccountIfNotExist=true

响应示例

其中"token":"d1AryxFPSH6r*-test"为签发的token数据,1分钟有效,用于createSessionByAuthCode

{
    "code":1,
    "data":{
        "loginSuccessResult":{
            "oauthOtherInfo":{
                "platformType":23,
                "gender":"1",
                "iotOauthPlatform":23
            },
            "openAccount":{
                "createAppKey":"2582**232",
                "displayName":"陈**",
                "domainId":809***2100,
                "enableDevice":true,
                "gmtCreate":1552960125000,
                "gmtModified":1552960125000,
                "hasPassword":false,
                "id":4***37,
                "mobileConflictAccount":false,
                "mobileLocationCode":"86",
                "oauthPlateform":23,
                "openId":"5259**10-ac3f-448c-2***2-2233",
                "pwdVersion":0,
                "status":1,
                "subAccount":false,
                "type":0,
                "version":1
            },
            "token":"d1AryxFPSH6r*****-test"
        },
        "mobileBindRequired":false
    },
    "message":"SUCCESS",
    "subCode":0,
    "successful":true,
    "traceId":"0a98a36815538270858451413e78a1",
    "vid":"null"
}

服务器端错误(调用 API)

以下为API服务端错误,如果频繁错误,可联系服务商。

错误代码 Http状态码 语义 解决方案
Internal Error 500 内部错误 建议重试,或者联系服务商
Failed To Invoke Backend Service 500 底层服务错误 API 提供者底层服务错误,建议重试,如果重试多次仍然不可用,可联系 API 服务商解决
Service Unavailable 503 服务不可用 建议重试,或者联系服务商
Async Service 504 后端服务超时 建议重试,或者联系服务商

错误码

错误代码 Http 状态码 语义 解决方案
Throttled by USER Flow Control 403 因用户流控被限制 调用频率过高导致被流控,可以联系 API 服务商协商放宽限制。
Throttled by APP Flow Control 403 因APP流控被限制 调用频率过高导致被流控,可以联系 API 服务商协商放宽限制。
Throttled by API Flow Control 403 因 API 流控被限制 调用频率过高导致被流控,可以联系 API 服务商协商放宽限制。
Throttled by DOMAIN Flow Control 403 因二级域名流控被限制 直接访问二级域名调用 API,每天被访问次数上限1000次。
TThrottled by GROUP Flow Control 403 因分组流控被限制 调用频率过高导致被流控,可以联系 API 服务商协商放宽限制。
Quota Exhausted 403 调用次数已用完 购买的次数已用完。
Quota Expired 403 购买次数已过期 购买的次数已经过期。
User Arrears 403 用户已欠费 请尽快充值续费。
Empty Request Body 400 body 为空 请检查请求 Body 内容。
Invalid Request Body 400 body 无效 请检查请求 Body。
Invalid Param Location 400 参数位置错误 请求参数位置错误。
Unsupported Multipart 400 不支持上传 不支持上传文件。
Invalid Url 400 Url 无效 请求的 Method、Path 或者环境不对。请参照错误说明 Invalid Url。
Invalid Domain 400 域名无效 请求域名无效,根据域名找不到 API。请联系 API 服务商。
Invalid HttpMethod 400 HttpMethod 无效 输入的 Method 不合法。
Invalid AppKey 400 AppKey 无效或不存在 请检查传入的 AppKey。注意左右空格的影响。
Invalid AppSecret 400 APP 的Secret 错误 检查传入的 AppSecret。注意左右空格的影响。
Timestamp Expired 400 时间戳过时 请核对请求系统时间是否为标准时间。
Invalid Timestamp 400 时间戳不合法 请参照 请求签名说明文档。
Empty Signature 404 签名为空 请传入签名字符串,请参照 请求签名说明文档。
Invalid Signature, Server StringToSign:%s 400 签名无效 签名无效,参照 Invalid Signature 错误说明
Invalid Content-MD5 400 Content-MD5 值不合法 请求 Body 为空,但传入了 MD5 值,或 MD5 值计算错误。请参照 请求签名说明文档。
Unauthorized 403 未被授权 APP 未获得要调用的 API 的授权。请参照错误说明 Unauthorized。
Nonce Used 400 SignatureNonce 已被使用
API Not Found 400 找不到 API 传入的APIdi地址或者HttpMethod不正确,或已下线。

createSessionByAuthCode调用说明

调用示例:

//1. 拿到oa的token
String token = "loginByOAuth返回的token";
//2.通过oa的token去获取iottoken
IoTApiRequest request = new IoTApiRequest();
//设置api的版本
request.setApiVer("1.0.5");
JSONObject jsonObject = new JSONObject();
jsonObject.put("authCode", token);
jsonObject.put("appKey",this.appKey);

jsonObject.put("loginSource","openAccount");
jsonObject.put("accountType","OA_TOKEN");

request.putParam("request",jsonObject);
String path =  "/account/createSessionByAuthCode";

//请求参数域名、path、request
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", path, request, true);

返回值

{
    "id":"a2845614-7156-42ff-94f7-9bc8db03bfa1",
    "code":200,
    "data":{
        "identityId":"50f2op52a61e7d********aac900fd071323",
        "iotToken":"267f8002434befa7*******dde18a8",
        "refreshToken":"4DF38E239EA0********5262D9C15F",
        "iotTokenExpire":72000,
        "refreshTokenExpire":720000
    }
}

results matching ""

    No results matching ""