场景简介
除了短信验证码辅助认证外,管理员还可以配置辅助认证方式未TOTP令牌/Radius认证。和短信辅助认证相比,整体认证流程是一致的。
前置步骤
1.在实际集成之前,我们要确保已经进行过开发准备,选择了对应的集成方式
2.在aTurst控制台创建测试用户,并配置好用户名密码认证+TOTP令牌/Radius辅助认证,参考产品手册
3.使用对应的Demo程序验证可以正常使用
流程图
集成步骤
1.用户名密码主认证
参考典型场景用户名密码认证
2.处理二次认证-TOTP令牌或Radius认证
如果您的服务器设置了Radius或TOTP令牌的增强认证方式,在完成用户密码认证后,服务端认证结果会要求进行二次认证,其中Raiuds认证对应nextAuth == atrust_auth_type::ATRUST_AUTH_TYPE_RADIUS TOTP认证对应nextAuth == atrust_auth_type::ATRUST_AUTH_TYPE_TOTP
示例代码(TOTP辅助认证)
atrust_auth_type nextAuth;
void *data;
atrust_error_code ec = atrust_sync_login_by_totp(m_totp, &nextAuth, &data);
switch (ec) {
// 成功
case atrust_error_code::OK:
// TOTP令牌认证成功!
break;
case atrust_error_code::PASSPORT_FAILED:
// 认证失败,可能是TOTP过期或错误。
return;
case atrust_error_code::AUTH_PARAM_EMPTY:
// 输入的参数为空!
return;
case atrust_error_code::OUT_PARAM_WRITE_ERROR:
// 出参无法写入!
return;
case atrust_error_code::SDPC_UNINITIALIZED:
// 未调用初始化接口!
return;
case atrust_error_code::ATRUST_CONNECT_ERROR:
// aTrust客户端连接失败!如果重试任然失败,请检查aTrust客户端是否正确安装并运行。
return;
case atrust_error_code::NO_PHONE_NUMBER_FOR_SMS_AUTH:
// 设置了短信认证,但没有配置有效的号码。
return;
case atrust_error_code::BAD_ALLOC_ERROR:
// 内存分配失败。
return;
case atrust_error_code::UNSOPPORTED_NEXT_AUTH_TYPE:
// 服务端设置了不支持的增强认证方式。
return;
// 未知的业务执行过程失败
default:
// 接口调用失败!请在atrust_code.h中检查错误码,或尝试重试。错误码:ec
return;
}
switch (nextAuth) {
case atrust_auth_type::ATRUST_AUTH_TYPE_OK:
// 登录成功!
break;
//一般不会出现双重辅助认证的情况
case atrust_auth_type::ATRUST_AUTH_TYPE_SMS: {
// TOTP令牌认证成功!下一步辅助认证:短信验证码
atrust_auth_sms_phone_number_data *phoneData = static_cast<atrust_auth_sms_phone_number_data *>(data);
if (phoneData != NULL) {
// 用户手机号:phoneData->phone_number;
}
break;
}
case atrust_auth_type::ATRUST_AUTH_TYPE_RADIUS:
// TOTP令牌认证成功!下一步辅助认证:Radius认证
break;
default:
// TOTP令牌认证成功,但服务器返回了不支持的辅助认证类型
}
// 释放内存
atrust_free(data);
data = nullptr;
注意:
- Radius作为辅助认证时和TOTP认证接口几乎相同,示例代码仅写TOTP令牌认证,Radius认证不做重复说明,注意区分接口名称。
3.1 认证成功
当认证接口atrust_sync_login_by_totp返回结果为atrust_error_code::OK时表示本次认证操作已经成功。一般情况下辅助认证成功之后表示已经完成登录操作,登录之后aTrust客户端后台服务进程会从控制器上获取应用策略启动隧道服务,此时还不能立即访问隧道资源,需要等待隧道启动成功。
3.2 认证失败
当认证接口atrust_sync_login_by_totp返回结果不为atrust_error_code::OK时表示认证不成功,需要根据不同的错误码进行不同的操作,详情可参考demo程序或错误码说明。
3.3 处理下一次认证
当认证接口atrust_sync_login_by_totp返回结果为atrust_error_code::OK,但是nextAuth的结果不为atrust_auth_type::ATRUST_AUTH_TYPE_OK时,说明管理员还开启了其它增强认证,需要进一步处理下一次认证。(一般不会出现双重辅助认证的情况)