身份认证 SDK

更新时间:2018-08-29 21:21:57

概述

提供基于 iotToken 的用户身份认证方案,通过和账号及用户 SDK、API 通道 SDK 的集成,完成用户身份凭证的生成和管理,以及发起 API 请求的用户身份的鉴权

依赖 SDK 概述
API 通道 提供 API 通道能力

初始化

身份认证 SDK 的初始化依赖 API 通道以及账号和用户SDK的初始化,请参见:API 通道SDK - 初始化账号和用户 SDK初始化

SDK(com.aliyun.iot.aep.sdk:iot-credential)版本小于0.0.1.7,请使用如下方式初始化

//其中loginAdapter为OLoginAdapter,务必注意在调用之前,保证loginAdapter已经完成初始化(即完成了用户和账号SDK的初始化)
IoTCredentialManageImpl.init(loginAdapter, appkey);

SDK(com.aliyun.iot.aep.sdk:iot-credential)版本为0.0.1.7以及以上,请使用如下方式初始化

//务必注意在调用之前,保证完成了用户和账号SDK的初始化
IoTCredentialManageImpl.init(appKey);

使用方式

当使用 API 通道 执行某些需要IoT身份鉴权的业务请求时,统一身份认证 SDK 为 API 通道提供了一个自动完成请求认证信息填充的模块 IoTCredentialProviderImpl,使用方式如下:

  1. 初始化IoTCredentialHook模块代码如下:

    IoTAuthProvider provider = new IoTCredentialProviderImpl(IoTCredentialManageImpl.getInstance(app));
    IoTAPIClientImpl.getInstance().registerIoTAuthProvider("iotAuth", provider);
    
  2. 构建需要鉴权的业务请求 IoTRequest

构建 IoTRequest 时需要增加 AuthType 参数(参数填写注册 IoTCredentialHook 时,注册的 key,本例为“iotAuth”) ,代码如下所示:

IoTRequest request = new IoTRequestBuilder()
    .setPath("path")
    .setApiVersion("1.0.4")
    .addParam("request", paramMap)
    .setAuthType("iotAuth")
    .build();

API 通道内部会触发 IoTCredentialProviderImpl ,自动刷新并填充认证信息,完成正常的业务请求。

混淆配置


-keep public class com.aliyun.iot.aep.sdk.credential** {
    public <methods>;
    public <fields>;
}

更多功能

获取/刷新用户凭证

获取用户认证数据代码如下,如果结果返回NULL,可以调用异步刷新接口重新获取

IoTCredentialManage ioTCredentialManage = IoTCredentialManageImpl.getInstance(app);
if(ioTCredentialManage!=null){
    ioTCredentialManage.getIoTCredential();
}

其中IotCredentialData常用字段如下:

public class IoTCredentialData {
    /**
     * 临时令牌,对请求做身份校验
     */
    public String iotToken;

    /**
     * iotToken 创建时间,标准Unix时间戳
     */
    public long iotTokenCreateTime;

    /**
     * iotToken失效时间 -- 时间与云端同步,单位为秒
     */
    public long iotTokenExpireTime;

    /**
     * refreshToken ,用于刷新 iotToken
     */
    public String refreshToken;

    /**
     * refreshToken 创建时间,标准Unix时间戳
     */
    public long refreshTokenCreateTime;

    /**
     * refreshToken失效时间 -- 时间与云端同步,单位为秒
     */
    public long refreshTokenExpireTime;

    /**
     * iot 用户唯一身份标识 identityId
     */
    public String identity;
}


刷新用户认证数据代码如下:

IoTCredentialManage ioTCredentialManage = IoTCredentialManageImpl.getInstance(app);
if (ioTCredentialManage != null) {
    ioTCredentialManage.asyncRefreshIoTCredential(new IoTCredentialListener() {
        @Override        
        public void onRefreshIoTCredentialSuccess(IoTCredentialData ioTCredentialData) {
            Log.i(TAG, "refresh IoTCredentailData success :" + ioTCredentialData.toString());
        }

        @Override
        public void onRefreshIoTCredentialFailed(IoTCredentialManageError ioTCredentialManageError) {
            Log.i(TAG, "refresh IoTCredentailData failed ");
            if (ioTCredentialManageError != null) {
                Log.i(TAG, "error code is:" + ioTCredentialManageError.errorCode);
            }
        }
    });
}

常见错误码含义:

    /**
     * 账号未登录,需要登录
     */
    public static final int RESULT_CODE_NOT_LOGIN = 0;

    /**
     * 账号类型错误, accountType 需要和一站式开发平台配置保持一致
     */
    public static final int RESULT_CODE_ACCOUNT_TYPE_INVALID = 1;

    /**
     * 账号 authCode 无效
     */
    public static final int RESULT_CODE_AUTHCODE_INVALID = 2;

    /**
     * 服务器返回 refreshToken 过期或无效,需要重新登录
     */
    public static final int RESULT_CODE_REFRESHTOKEN_INVALID = 3;

    /**
     * 服务器响应的报文格式异常
     */
    public static final int RESULT_CODE_WRONG_RESPONSE_FORMAT = 4;

    /**
     * 账号 authCode 校验失败
     */
    public static final int RESULT_CODE_AUTHCODE_CHECK_FAILED = 5;

    /**
     * 其他错误,如,网络错误或服务器返回的错误,会把原始错误信息通过 userInfo.detail 透传
     */
    public static final int RESULT_CODE_OHTER = -1;

results matching ""

    No results matching ""