4.4.2 用户名密码认证流程
优质
小牛编辑
127浏览
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