身份认证 SDK
更新时间:2018-06-25 09:27:30
概述
提供基于 iotToken 的用户身份认证方案,通过和账号及用户 SDK、API 通道 SDK 的集成,完成用户身份凭证的生成和管理,以及发起 API 请求的用户身份的鉴权
依赖 SDK | 概述 |
---|---|
API 通道 | 提供 API 通道能力 |
初始化
身份认证 SDK 的初始化依赖 API 通道的初始化,请参见:API 通道SDK - 初始化。
SDK(com.aliyun.iot.aep.sdk:iot-credential)版本小于0.0.1.7,请使用如下方式初始化
OALoginAdapter loginAdapter = new OALoginAdapter(context);
IoTCredentialManageImpl.init(loginAdapter, appkey);
SDK(com.aliyun.iot.aep.sdk:iot-credential)版本为0.0.1.7以及以上,请使用如下方式初始化
OALoginAdapter loginAdapter = new OALoginAdapter(context);
LoginBusiness.init(application, loginAdapter, true, env);
身份认证SDK的初始化必须在LoginBusiness之后,如果您已经初始化过了LoginBusiness,则直接
通过下面一行代码即可完成身份认证SDK的初始化
IoTCredentialManageImpl.init(appKey);
其中 OALoginAdapter 是对统一账号抽象 ILoginAdapter 的实现。OALoginAdapter 可以参考 DemoApp 源码里src/com/aliyun/iot/aep/demo/sdk/base/delegate/adapter/OALoginAdapter.java的实现。
其中LoginBusiness为账号抽象接口。
使用方式
当使用 API 通道 执行某些需要IoT身份鉴权的业务请求时,统一身份认证 SDK 为 API 通道提供了一个自动完成请求认证信息填充的模块 IoTCredentialProviderImpl,使用方式如下:
初始化IoTCredentialHook模块代码如下:
IoTAuthProvider provider = new IoTCredentialProviderImpl(IoTCredentialManageImpl.getInstance(app)); IoTAPIClientImpl.getInstance().registerIoTAuthProvider("iotAuth", provider);
构建需要鉴权的业务请求 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();
}
刷新用户认证数据代码如下:
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;