# 安全管理

本文将介绍访客登录时安全管理的相关功能。

# 国密加密

在登录时需要设置 CA 证书和账户分录。

通过 setCertificate 设置 base64 编码后的证书字符串,通过 setAccountEntry 设置账户分录

NSString *caPath = [[NSBundle mainBundle] pathForResource:@"CA" ofType:@"der"];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:caPath];
NSString *ca = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
param.certificate = ca;
param.accountEntry = @"AccountEntry:sarc -h arc@AccountEntry -p 198 -S 3;";
[_client login:@"123" password:@"123" loginParam:param];

在呼叫时设置加密方式 setSecurityType

/**
 *  入会加密方式
 */
typedef NS_ENUM(NSInteger, JCMediaChannelSecurityType) {
    /// 不加密
    JCMediaChannelSecurityTypeDisable = 0,
    /// SRTP
    JCMediaChannelSecurityTypeSrtp,
    /// SM4
    JCMediaChannelSecurityTypeSm4,
};
JCGuestCallParam *param = [[JCGuestCallParam alloc] init];
param.securityType = JCMediaChannelSecurityTypeSm4;
[_guest call:@"10086" callParams:callParam];

# Token校验

允许用户登录时,带入token。如果未使用,可以不带。

token: token 区分新旧 token,old 传 true 会使用菊风提供的 token 校验,old 传 false 会使用集中身份认证。

/**
 * 登录 Juphoon Cloud 平台
 *
 * 只有登录成功后才能进行平台上的各种业务
 *
 * @param userId      		用户名,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 66 个字符):
 * - 26 个小写英文字母 a-z
 * - 26 个大写英文字母 A-Z
 * - 10 个数字 0-9
 * - '+','-','_','.'。另外 '-','_','.' 这三个字符不能处于用户名的第一位
 * @param password      	密码,不能为 nil 或 "",长度不能超过 128 字符
 * @param loginParam      	登录参数,一般不需要设置,如需设置请询问客服,传 nil 则按默认值,详见 JCClientLoginParam
 * @return 调用是否成功
 * - true:正常执行调用流程,登录结果通过 {@link JCClientCallback#onLogin:reason: onLogin} 通知
 * - false:调用异常,不会收到 {@link JCClientCallback#onLogin:reason: onLogin} 通知
 */
- (bool)login:(NSString* __nonnull)userId password:(NSString* __nonnull)password loginParam:(JCClientLoginParam* __nullable)loginParam;

调用示例:

JCClientLoginParam *param = [[JCClientLoginParam alloc] init];
if (_tokenTextField.text.length) {
    param.token = _tokenTextField.text;
    param.old = !_tokenSwitch.isOn;
}
[JCManager.shared.client login:_textAccount.text password:@"123" loginParam:param];

# 密钥协商

密钥协商:通过上层提供的密钥协商文件,转成 base64 字符串后带入接口。

允许用户登录时带入密钥协商。如果未使用,可以不带。

/**
 * 登录 Juphoon Cloud 平台
 *
 * 只有登录成功后才能进行平台上的各种业务
 *
 * @param userId      用户名,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 66 个字符):
 * - 26 个小写英文字母 a-z
 * - 26 个大写英文字母 A-Z
 * - 10 个数字 0-9
 * - '+','-','_','.'。另外 '-','_','.' 这三个字符不能处于用户名的第一位
 * @param password      密码,不能为 nil 或 "",长度不能超过 128 字符
 * @param loginParam      登录参数,一般不需要设置,如需设置请询问客服,传 nil 则按默认值,详见 JCClientLoginParam
 * @return 调用是否成功
 * - true:正常执行调用流程,登录结果通过 {@link JCClientCallback#onLogin:reason: onLogin} 通知
 * - false:调用异常,不会收到 {@link JCClientCallback#onLogin:reason: onLogin} 通知
 */
- (bool)login:(NSString* __nonnull)userId password:(NSString* __nonnull)password loginParam:(JCClientLoginParam* __nullable)loginParam;

调用示例:

JCClientLoginParam *param = [[JCClientLoginParam alloc] init];
//秘钥协商
if (_rootDerSwitch.isOn)
{
        NSString *s = [[NSBundle mainBundle] pathForResource:@"roota" ofType:@"der"];
        NSData *data = [[NSFileManager defaultManager] contentsAtPath:s];
        NSString *rootDer = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
        param.rootDer = rootDer;
 }
[JCManager.shared.client login:_textAccount.text password:@"123" loginParam:param];