学伴分析(一)安全性实践

用户数据的安全性毋庸置疑,下面将从学伴的iOS部分来进行说明。

全站HTTPS

为了应对数据明文传输隐患这个问题,在学伴中采用了自签名HTTPS方式,后端提供了一个用在客户端的cer证书

- (AFHTTPSessionManager *)sessionManager {
    if (_sessionManager == nil) {
        _sessionManager = [AFHTTPSessionManager manager];
        _sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
        _sessionManager.securityPolicy = [self customSecurityPolicy];
    }
    return _sessionManager;
}

- (AFSecurityPolicy*)customSecurityPolicy {
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"https" ofType:@"cer"];//证书的路径
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    NSSet *certSet = [[NSSet alloc] initWithObjects:certData, nil];
    // AFSSLPinningModeCertificate 使用证书验证模式
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    // 如果是需要验证自建证书,需要设置为YES
    securityPolicy.allowInvalidCertificates = YES;
    securityPolicy.validatesDomainName = NO;
    [securityPolicy setPinnedCertificates:certSet];
    return securityPolicy;
}

LoginToken与Token机制

Q:LoginToken是什么?
A:客户端通过登录请求提交用户名和密码,服务端验证通过后生成LoginTokenToken与该用户进行关联,并将它们返回给客户端,保存在Keychain中,当Token失效的时候用来请求新的Token。用户在另一台设备登录或退出登录的时候LoginToken会失效,跳转到登录界面。
Q:Token是什么?
A:客户端在接下来的请求中都会携带Token,服务端通过解析Token检查请求的合法性, 一段时间后失效(学伴中为2小时)。
Q:为何使用LoginToken?
A:Token被窃取的几率较大

如何在Token失效的情况下做到用户无感知重发请求

这其中包含三个部分:

  1. 请求接口A失败,发现Token失效
  2. LoginToken请求新的Token
  3. 用新的Token重新请求接口A

具体实现: XAPIManager请求失败(Token失效,且在BaseApiManager中判断)后,发送通知。然后中间人收到通知,记录下随着通知过来的Object,也就是失败的那个Manager。中间人收到Token刷新成功的回调,拿出刚才拿到的失败的那个Manager,直接调用[XManager loadData]。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容