-
Notifications
You must be signed in to change notification settings - Fork 205
安全接入——客户端
Kevin edited this page Dec 27, 2017
·
6 revisions
在此之前,请确保已经阅读过如何快速接入TENCENT SOTER。同时,为了帮助你更好理解如何实现在客户端的安全接入,建议阅读本章节的同学参考Sample的实现。
NetWrapper是soter-wrapper为了将网络请求封装在流程中而提供的网络封装结构体。各个流程中,开发者只需要实现对应的NetWrapper,作为相应流程API参数,即可封装所有网络操作。 其基础接口定义为:
public interface ISoterNetBaseWrapper<W, T> {
void setRequest(@NonNull W requestDataModel); // 从requestDataModel中获取网络上传参数
void execute(); // 定义如何发送该网络请求
void setCallback(ISoterNetCallback<T> callback); // 定义当网络回包时,需要提供的结果结构体
}
根据功能不同,可分为
-
IWrapGetSupportNet
:定义了通过后台获取是否支持TENCENT SOTER的后台请求 -
IWrapUploadKeyNet
:定义了上传ASK、AuthKey的后台请求 -
IWrapGetChallengeStr
:定义了获取挑战因子的后台请求 -
IWrapUploadSignature
:定义了上传最终签名授权串的后台请求
可以参考sample实现各个NetWrapper。
安全接入流程相对于快速接入而言,接口调用顺序并无差异,唯一需要注意的是需要提供与后台交互所需的NetWrapper。
在初始化过程中,需要提供从后台获取本设备是否支持的NetWrapper。
InitializeParam param = new InitializeParam.InitializeParamBuilder()
.setGetSupportNetWrapper(new IWrapGetSupportNet(){...}) // 从后台获取本设备是否支持的NetWrapper。
.setScenes(ConstantsSoterDemo.SCENE_PAYMENT) // 自定义场景值,用于标识后续生成密钥和验签场景
.build();
SoterWrapperApi.init(context, mGetIsSupportCallback, param);
在准备密钥过程中,需要提供上传ASK(应用密钥)的NetWrapper,以便后台处理所传数据并送往TAM验签;以及上传AuthKey(业务密钥)的NetWrapper,以便后台验签并存储(注:不再建议提前生成ASK,可能会拖慢启动。同时极少量机型有兼容性问题,提前生成ASK可能会导致不可预见错误。建议第一次使用相关业务时生成。
)。
在准备ASK的过程中,既可以单独生成:
SoterWrapperApi.prepareAppSecureKey(new SoterProcessCallback<SoterProcessKeyPreparationResult>(){...}, // 生成结果回调
false, // 已有ASK的话是否重新生成
new IWrapUploadKeyNet(){...} // 上传ASK的NetWrapper
);
也可以在生成AuthKey的时候,提供上传AuthKey的NetWrapper
SoterWrapperApi.prepareAuthKey(new SoterProcessCallback<SoterProcessKeyPreparationResult>() {...}, // 生成结果回调
false, // 已有AuthKey的话是否重新生成
true, // 如果没有ASK,是否一并生成
ConstantsSoterDemo.SCENE_PAYMENT, // 本次密钥生成所使用业务的场景值,需要在init时填入
new IWrapUploadKeyNet(pwdDigest){...}, // 上传AuthKey的NetWrapper
new IWrapUploadKeyNet()){...}; // 上传ASK的NetWrapper
认证过程需要提供获取挑战因子(后台生成的字符串,用于最终签名填入)和上传认证结果的NetWrapper。
AuthenticationParam param = new AuthenticationParam.AuthenticationParamBuilder() // 通过Builder来构建认证请求
.setScene(ConstantsSoterDemo.SCENE_PAYMENT) // 指定需要认证的场景。必须在init中初始化。必填
.setContext(context) // 指定当前上下文。必填。
.setFingerprintCanceller(canceller) // 指定当前用于控制指纹取消的控制器。当因为用户退出界面或者进行其他可能引起取消的操作时,需要开发者通过该控制器取消指纹授权。建议必填。
.setIWrapGetChallengeStr(new IWrapGetSupportNet(){...}) // 用于获取挑战因子的网络封装结构体。如果在授权之前已经通过其他模块拿到后台挑战因子,则可以改为调用setPrefilledChallenge。如果两个方法都没有调用,则会引起错误。
// .setPrefilledChallenge("prefilled challenge") // 如果之前已经通过其他方式获取了挑战因子,则设置此字段。如果设置了该字段,则忽略获取挑战因子网络封装结构体的设置。如果两个方法都没有调用,则会引起错误。
.setIWrapUploadSignature(new IWrapUploadSignature(){...}) // 用于上传最终结果的网络封装结构体。该结构体一般来说不独立存在,而是集成在最终授权网络请求中,该请求实现相关接口即可。选填,如果没有填写该字段,则要求应用方自行上传该请求返回字段。
.setSoterFingerprintStateCallback(new SoterFingerprintStateCallback() {...}).build();
SoterWrapperApi.requestAuthorizeAndSign(processCallback, param);
概述
TENCENT SOTER介绍
TENCENT SOTER原理
基础
快速接入
进阶
安全接入
安全接入——客户端
安全接入——后台
接口文档
客户端接口文档
后台接口文档
个人信息保护规则
合规使用指南