场景简介

短信认证是最基本也是用户使用最多的辅助认证方式,熟悉了用户名密码+短信认证场景后,要实现其他类型的主认证+辅助认证(Radius/TOTP令牌),流程完全一致。

前置步骤

1.在实际集成之前,我们要确保已经进行过开发准备,选择了对应的集成方式

2.在aTurst控制台创建测试用户,并配置好用户名密码认证+短信辅助认证,参考产品手册

3.使用对应的Demo程序验证可以正常使用

流程图

用户名密码+短信认证.png

集成步骤

1.用户名密码主认证

参考典型场景用户名密码认证

2.处理二次认证-短信验证码认证

如果您的服务器设置了短信验证的增强认证方式,在完成用户密码认证后,服务端认证结果会要求短信认证,对应nextAuth == atrust_auth_type::ATRUST_AUTH_TYPE_SMS。在进行短信认证之前,需要先获取到短信验证码。

获取短信认证码接口详情

示例代码

void* data;
atrust_error_code ec = atrust_sync_fetch_sms(&data);
switch (ec) {
// 成功
case atrust_error_code::OK:
    // 短信验证码获取成功!
    break;
case atrust_error_code::AUTH_CHAIN_INCOMPLETE:
    // 认证链不完整,没有按照正确的顺序调用认证请求。
    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::BAD_ALLOC_ERROR:
    // 内存分配失败。
    return;
// 未知的业务执行过程失败
default:
    // 接口调用失败!请在atrust_code.h中检查错误码,或尝试重试。错误码:ec
    return;
}

if (data != NULL) {
    atrust_auth_sms_data *smsdata = static_cast<atrust_auth_sms_data *>(data);
    // 提示信息,注意编码方式以防乱码
    // std::string tipsTranslate = Utf8ToGbk(smsdata->tips);
    // 重新获取等待时间:smsdata->interval

    // 释放内存
    atrust_free(data);
    data = nullptr;
}

注意 1.在调用获取短信验证码接口前,已经能够从上一次认证接口的data参数中获取到用户配置的手机号码了。

3.短信验证码认证

在获取到短信验证码之后,可以使用短信验证码进行认证登录。短信认证的思路和流程与用户名密码主认证基本相同。事实上,短信验证接口的出参格式合用户名密码主认证是一样的,但返回的内容有所不同。

短信验证码认证接口详情

示例代码

atrust_auth_type nextAuth;
void *data;
atrust_error_code ec = atrust_sync_login_by_sms(m_sms, &nextAuth, &data);
switch (ec) {
// 成功
case atrust_error_code::OK:
    // 短信认证成功!
    break;
case atrust_error_code::PASSPORT_FAILED:
    // 认证失败,可能是验证码错误。
    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::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_RADIUS:
    // 短信认证成功!下一步辅助认证:Radius
    break;
case atrust_auth_type::ATRUST_AUTH_TYPE_TOTP:
    // 短信认证成功!下一步辅助认证:TOTP令牌
    break;
default:
    // 短信认证成功,但服务器返回了不支持的辅助认证类型
}

// 释放内存
atrust_free(data);
data = nullptr;

Radius认证接口详情

3.1 认证成功

当认证接口atrust_sync_login_by_sms返回结果为atrust_error_code::OK时表示本次认证操作已经成功。一般情况下辅助认证成功之后表示已经完成登录操作,登录成功之后aTrust客户端后台服务进程会从控制器上获取应用策略启动隧道服务,此时还不能立即访问隧道资源,需要等待隧道启动成功。

3.2 认证失败

当认证接口atrust_sync_login_by_sms返回结果不为atrust_error_code::OK时表示认证不成功,需要根据不同的错误码进行不同的操作,详情可参考demo程序或错误码说明。

3.3 处理下一次认证

当认证接口atrust_sync_login_by_sms返回结果为atrust_error_code::OK,但是nextAuth的结果不为atrust_auth_type::ATRUST_AUTH_TYPE_OK时,说明管理员还开启了其它增强认证,需要进一步处理下一次认证。(一般不会出现双重辅助认证的情况)

深信服科技 all right reserved,powered by Gitbook本文档更新于: 2024-07-25 14:08

results matching ""

    No results matching ""