4.4.2 用户名密码认证流程

优质
小牛编辑
134浏览
2023-12-01

如何初始化SDK并且让基本的用户名密码认证成功

  • 通过阅读此文档,您可以完成用户密码登录认证,并成功启动VPN SDK
  • 此文档默认已经集成SDK并且工程可以编译通过运行
  • 您完全可以参考demo(特别是 AuthViewController.m)进行代码编写,但此文档仍然列出了必要的步骤
  • 此文档只是参考,您应该根据具体需求因地适宜
  • 此文档会略过如头文件import等基本概念与步骤,只介绍重要的概念

在集成SDK过程中,通常您都是和 SangforAuthManager这个单例打交道,您可以通过[SangforAuthManager getInstance]获取到单例,接下来让我们看看如何进行一个用户名密码认证,其实非常简单:

~初始化SDK

SDK中有很多如认证成功失败、图形校验码等事件,都是通过SangforAuthDelegate来回掉的,所以第一步就是需要实现SangforAuthDelegate 回掉

//一个测试用类
//SangforSDKTestViewController.m
//                                              声明要实现这个协议
@interface SangforSDKTestViewController () 
@end

@implementation SangforSDKTestViewController
//..............

//⚠️具体实现,这几个回调是SDK认证逻辑的基本,必须要实现
#pragma mark - SangforAuthDelegate
/**
 认证失败
 @param error 错误原因
 */
- (void)onLoginFailed:(NSError *)error {
    //例如用户密码错误了,这里您可以根据需求进行提示
    //具体类型可以参考 "errheader.h"
}

/**
 认证过程回调
 @param nextAuthType 下个认证类型
 @prarm BaseMessage  下个认证的信息
 */
- (void)onLoginProcess:(VPNAuthType)nextAuthType message:(BaseMessage *)msg {
    //如 VPNAuthTypeSms = VPNAuthTypeSms 的 短信认证 (这个与VPN服务端配置相关)
    //此时您应该通过某UI界面获取到短信验证码,然后调用对应组合认证函数进行下一次认证
}

/**
 认证成功
 */
- (void)onLoginSuccess {
    //VPN认证成功了,您可以进行下一步操作了,例如进行界面跳转等
}

/**
 图形校验码回调

 @param data 图片信息
 */
- (void)onRndCodeCallback:(NSData *)data {
    //data是img数据,您应该将起显示出来,以配合
    //onLoginProcess 中 VPNAuthType = VPNAuthTypeRand 的图形验证码认证
    //您可以参考demo的处理
    //(PS:图形验证码会在多次输入错误的密码后,防止爆破攻击时出现在 onLoginProcess 认证过程回掉中 )
}

//⚠️在执行任何对SDK的操作前...
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.PWLoginBtn addTarget:self action:@selector(onPWLoginBtnPressed) forControlEvents:UIControlEventTouchUpInside];
    //⚠️初始化 SangforAuthManager 的 delegate,否则无法接收到认证回调
    [SangforAuthManager getInstance].delegate = self;
}

@end

~进行用户名密码认证

接下来,就可以进行用户名密码认证了,需要注意的是:

  • start...开头,如startPasswordAuthLogin,是主认证接口,用于主动触发 以do… 开头, 如doPasswordAuth:,是组合认证接口,在-(void)onLoginProcess:中调用

切勿错误使用

-(void) onPWLoginBtnPressed
{
    //这里根据您的模式选择 VPNModeL3VPN/VPNModeEasyApp
    VPNMode vpnMode    = VPNModeL3VPN;
    //这里当然您应该从UI控件获取到用户输入的VPN地址,或者固定写成贵司的VPN地址
    NSURL* vpnUrl      = [NSURL URLWithString:@"https://emm.saftest.com.cn"];
    //这里当然您应该从UI控件获取到用户输入的用户名密码
    NSString* username = @"sangfotest";
    NSString* password = @"testpw";

    //调用主认证接口进行认证
    //⚠️此处是调用主认证API
    //是   startPasswordAuthLogin
    //不是 doPasswordAuth
    //doPasswordAuth是用于组合认证的接口
    [[SangforAuthManager getInstance] startPasswordAuthLogin:vpnMode
                                                  vpnAddress:vpnUrl
                                                    username:username
                                                    password:password];
    //调用后,就会有回调通知认证结果!(所以记得先实现protocol回调并设置给 SangforAuthManager)
}

然后就会触发回调函数:

  • -(void)onLoginSuccess VPN登录成功了!
  • -(void)onLoginProcess: 您还需要下一次认证
  • -(void)onLoginFailed: 认证错误,您应该给予用户一些提示,具体类型可以参考 errheader.h

~下一步

自此,用户密码认证就已经完成了!

如果您还进一步的需要了解 组合认证,强烈建议您⚠️⚠️用demo登录贵司的VPN,查看demo代码是如何处理:

  • 如何处理-(void)onLoginProcess:回调来进行组合认证的
  • 如何处理图形验证码回调
  • 如何出处理密码修改请求或主动进行密码修改
  • 如何使用其他的一些常见API