场景简介

短信主认证是最基本的主认证方式之一,跟用户名密码认证类似,只是在传递认证参数上有点区别。

前置步骤

  1. 在实际集成之前,我们要确保已经进行过开发准备
  2. 在控制台创建测试用户,并配置好短信主认证,参考产品手册

流程图

流程图

集成步骤

1、初始化SDK

initSDK接口详情

注意:SDK接口都需要在SDK初始化后才能调用,否则会抛出异常。

初始化SDK主要是完成SDK核心功能配置的初始化,只能放到AppDelegate的application:didFinishLaunchingWithOptions:中初始化。

示例代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    /**
     * SDK的初始化模式只能放在didFinishLaunchingWithOptions中
     * 建议配置为SFSDKModeSupportMutable,表示当前应用的能力(零信任VPN的接入能力和数据防泄密能力)可以根据服务端配置动态变更
     * 配置为SFSDKFlagsHostApplication,表示当前集成应用是主应用。
     */
    SFSDKMode mode = SFSDKModeSupportMutable;
    [[SFUemSDK sharedInstance] initSDK:mode
                                 flags:SFSDKFlagsHostApplication
                                 extra:nil];
    ...
}

注意

SFSDKModeSupportMutable:(推荐使用模式) 初始化为该模式后,集成SDK的APP可以根据服务器的配置决定是仅具备零信任VPN的接入能力,还是具备零信任VPN的接入能力+数据防泄密能力

SFSDKModeSupportMutable详情

SFSDKModeSupportVpnSandbox:(已废弃, 不推荐使用) 该模式是启用vpn代理功能,和启用终端安全沙箱功能(水印,截屏防护,剪切板隔离,分享隔离等等安全功能); 只有当集成SDK的APP在应用中心授权给用户, 用户才可以使用集成SDK的APP接入使用, 并且占用并发授权和UEM移动版授权;

SFSDKModeSupportVpn:(已废弃, 不推荐使用) 该模式表示只是启用vpn代理功能,不启用终端安全沙箱功能(水印,截屏防护,剪切板隔离,分享隔离等等安全功能); 无论集成SDK的APP是否在应用中心授权给用户, 用户都可以使用集成SDK的APP接入使用, 并且仅占用并发授权;

2、设置认证回调

setAuthResultDelegate接口详情

aTrust身份认证属于通过网络耗时操作,SDK实现是通过代理异步回调来获取认证结果。请务必在使用认证接口前,按要求实现并注册认证结果回调。

示例代码如下:

@implementation BasicSceneViewController

- (void)viewDidLoad {
    ...
    [[SFUemSDK sharedInstance] setAuthResultDelegate:self];
    ...
}

@end

3、短信主认证

startPrimarySmsAuth接口详情

示例代码如下:

NSURL *url = [NSURL URLWithString:@"https://10.242.1.24"];
NSString *phoneNumber = @"86-185xxxxxx8626@sms";
/**
 * 开始短信主认证,认证结果会在认证回调onAuthSuccess,onAuthFailed,onAuthProgress中返回
 * @param url 请求认证的服务器地址信息
 * @param phoneNumber 手机号码:86-xxxxxxxxxxx@认证域
*/
[[SFUemSDK sharedInstance].auth startPrimarySmsAuth:url phoneNumber:phoneNumber];

4、处理短信发送

doSecondaryAuth接口详情

调用startPrimarySmsAuth认证通过后会执行onAuthProgress回调,并通过nextAuthType参数告知需要认证的类型为短信主认证。当调用该回调时,会先发送短信到用户手机上,所以此时只需展示对应的短信认证UI界面,通过UI收集到短信验证码,调用doSecondaryAuth接口完成短信主认证。

示例代码如下:

/**
 * 主认证成功,但需要辅助认证(下一步认证)
 *
 * @param nextAuthType 下一步认证类型
 * @param msg  下一步认证信息
 */
- (void)onAuthProcess:(SFAuthType)nextAuthType message:(BaseMessage *)msg {
    switch (nextAuthType) {
        case SFAuthTypeSMS:
            // 处理短信主认证的一些逻辑,如显示验证码输入框
            [self showSMSAuthAlert:(SmsMessage *)msg];
            break;
        default:
                /**
                * 服务端配置了首次登陆强制修改密码,或者其他非短信验证码二次认证类型时,认证时也会回调此方法,
                * 此时如果不打算适配此类型二次认证,建议给用户提示,让管理员调整配置
                */
            [AlertUtil showAlert:[NSString stringWithFormat:@"暂不支持此种认证类型(%ld)", (long)nextAuthType] message:@"管理员请关掉此认证"];
            break;
    }
}

/**
 * 调用短信辅认证,输入参数为短信验证码
 */
[[SFUemSDK sharedInstance] doSecondaryAuth:SFAuthTypeSMS data:@{kAuthKeySMS:code}];

5、认证成功

主认证成功后,如果管理员未配置二次认证,就会执行onAuthSuccess回调,至此整个认证流程就结束了,认证成功后,应用就可以正常的访问aTrust管理员配置的内网服务器资源, 执行业务代码

示例代码如下:

   /**
    * 认证成功的回调
    * @param msg 认证成功的信息
    */
- (void)onAuthSuccess:(BaseMessage *)msg {
    //认证成功的业务
}

6、认证失败

如果有认证失败的情况,会执行onAuthFailed回调, 在该回调中提示用户,重新开始认证

示例代码如下:

/**
 * 认证失败的回调
 *
 * @param msg 错误信息
 */
- (void)onAuthFailed:(BaseMessage *)msg {
    // 重新开始认证或者其他逻辑
}

7、处理下一次认证

如果服务端配置了首次登陆强制修改密码,或者其他二次认证时,主认证成功后会回调此方法, 如果明确不需要适配二次认证, 建议在此回调给用户提示,让管理员调整配置

示例代码如下:

   /**
 * 主认证成功,但需要辅助认证(下一步认证)
 *
 * @param nextAuthType 下一步认证类型
 * @param msg  下一步认证信息
 */
- (void)onAuthProcess:(SFAuthType)nextAuthType message:(BaseMessage *)msg {
    NSLog(@"BasicSceneViewController onAuthProcess:%ld, msg:%@", (long)nextAuthType, msg.errStr);
    /**
     * 服务端配置了首次登陆强制修改密码,或者其他二次认证时,认证时会回调此方法,
     * 此时如果不打算适配二次认证,建议给用户提示,让管理员调整配置
     */
    [AlertUtil showAlert:[NSString stringWithFormat:@"暂不支持此种认证类型(%ld)", (long)nextAuthType] message:@"管理员请关掉此认证"];
}

8、监听注销回调

registerLogoutListener接口详情

sdk使用过程中有可能出现被注销的情况,如应用主动调用注销接口、服务端管理员主动让用户下线等,所以应用监听注销回调是必须的,避免出现sdk内部已经注销了,但是应用无感知,从而出现业务异常的问题; 注意:注销回调建议在应用全生命周期内进行监听,避免出现在某个页面监听,页面销毁后,注销事件丢失的问题,可以参考MainApp中AppDelegate的处理方法:在sdk初始化后就用一个单例对象注册注销回调

示例代码如下:

    /**
     * 注册注销事件监听回调,推荐在AppDelegate里面监听,可以做到全局监听,方便统一处理注销事件
     */
    [[SFUemSDK sharedInstance] registerLogoutDelegate:self];

9、免密认证

startAutoTicket接口详情

sdk提供了免密认证的能力,即认证流程全部成功后,重启应用或者服务端超时注销用户后,应用不需要再次使用用户名密码进行认证,可以直接调用免密认证接口进行认证上线

注意:免密认证不能完全取代主认证,因为用户主动注销或者管理员在控制台主动让用户下线等场景下,免密信息会失效,免密认证就会失败,所以应用需要在免密认证失败后,继续使用用户名密码进行认证,可以参考MainApp中的处理方式

示例代码如下:

/**
    * 这里是自动免密认证接口,返回true表示认证成功,此时用户就可以进行资源访问了,
    * 如果返回false,表示当前不满足自动免密条件,需要用户主动调用用户名密码认证接口
    */
if ([[SFUemSDK sharedInstance] startAutoTicket]) {
    [AlertUtil showAlert:@"免密认证成功" message:@"可直接跳到您的业务界面访问资源" completion:^{
        [self showTestList];
    }];
}

results matching ""

    No results matching ""