客户身份(CIAM)

密码登录

# 文档说明

本文为您介绍iOS客户端如何接入密码登录功能。

# 流程说明

登录场景:

  1. 用户名+密码登录:用户输入用户名和密码,IDaaSSDK校验用户名密码后返回session_token和id_token给APP客户端。

  2. 手机号+密码登录:用户输入手机号和密码,IDaaSSDK校验手机号密码返回session_token和id_token给APP客户端。

  3. 邮箱+密码登录:用户输入邮箱和密码,IDaaSSDK校验邮箱和密码返回session_token和id_token给APP客户端。

  4. 统一用户密码登录接口:可以在一个页面实现用户名/手机号/邮箱+密码登录,返回session_token和id_token给APP客户端。

服务于登录场景的流程:

  1. 点击登录按钮后,系统返回密码即将过期,提醒用户修改密码,可以被忽略,可以跳转修改密码页面。

  2. 点击登录按钮后,系统返回密码已经过期,必须强制用户修改密码。

  3. 登录前忘记密码,通过手机号找回密码。

# 登录流程

集成流程说明

  1. 输入用户名+密码/手机号+密码/邮箱+密码,点击登录按钮。

  2. APP客户端调用登录方法(4种)。

  3. IDaaS SDK调用IDaaS服务端认证。认证结果分为四种(成功,密码即将过期,密码过期,失败)。

  4. 成功情况下,IDaaS服务端返回session_token和id_token。

  5. IDaaS SDK返回session_token和id_token给APP客户端。

  6. 如果密码即将过期,IDaaS服务端返回密码即将过期参数。

  7. IDaaS SDK返回密码即将过期给APP客户端。

  8. 用户可以选择跳过修改密码或者直接修改密码。

  9. APP客户端根据用户点击按钮,调用跳过修改密码方法或者调用修改密码方法。

  10. IDaaS SDK调用IDaaS服务端跳过修改密码接口或者调用修改密码接口。

  11. IDaaS 服务端校验成功就返回session_token和id_token,失败就返回错误码。

  12. IDaaS SDK将成功失败的参数返回给APP客户端。

  13. 如果密码已经过期了,IDaaS 服务端返回给IDaaS SDK强制修改密码的参数。

  14. IDaaS SDK返回给客户端APP强制修改密码的参数。

  15. 用户被强制修改密码,APP客户端调用修改密码的方法。

  16. IDaaS SDK调用IDaaS 服务端修改密码的接口。

  17. IDaaS 服务端密码修改成功返回session_token和id_token给IDaaS SDK/密码修改失败返回错误码。

  18. IDaaS SDK密码修改成功返回session_token和id_token给APP客户端/密码修改失败返回错误码。

  19. 客户端可以使用id_token来校验登录有效期和获取用户基本信息。

  20. 客户端可以使用session_token来刷新id_token。

# 找回密码流程

集成流程说明

  1. 用户点击忘记密码按钮。

  2. APP客户端展示找回密码页面,此页面需要APP自己提供。

  3. 用户输入手机号,点击获取验证码按钮。

  4. APP调用滑块验证方法。

  5. IDaaS SDK请求IDaaS 服务端滑块校验接口。

  6. IDaaS 服务端返回滑块校验参数。

  7. IDaaS SDK拉起滑块验证窗口展示。

  8. 用户拖动滑块验证。

  9. IDaaS SDK发送滑块验证给IDaaS服务端。

  10. IDaaS 服务端返回滑块校验结果。

  11. IDaaS SDK返回滑块校验结果给APP客户端。

  12. APP客户端用滑块token调用IDaaS SDK发送短信验证码的方法。

  13. IDaaS SDK调用IDaaS 服务端发送验证码的接口。

  14. IDaaS 服务端返回发送验证码结果给IDaaS SDK。

  15. IDaaS SDK返回发送验证码结果给APP客户端。

  16. 用户收到短信验证码并且填入,点击找回密码按钮。

  17. APP客户端用手机号+验证码+新密码调用IDaaS SDK的找回密码方法。

  18. IDaaS SDK调用IDaaS服务端找回密码接口。

  19. IDaaS服务端返回找回密码结果给IDaaS SDK。

  20. IDaaS SDK返回找回密码结果给APP客户端。

# 环境搭建

# 获取clientID

登录IDaaS企业中心平台,点击 “资源-->应用” 选择跟自己相关的应用点击即可查看到。

# 密码策略设置

此设置是为了配置密码过期时间和提醒时长。先按照下图路径到密码策略的模块。

密码过期下面可以开启:

开启后,可以按照下图所示设置密码多长时间过期,提前通知的天数。

这个设置是为了登录后IDaaS 服务端检测目前登录使用的密码多长时间需要更换,并且在几天前就提示用户修改。密码过期检查开启后在每次登录都会按照配好的设置参数检查。

# 引入依赖包

无第三方sdk依赖

# 添加主库

AuthnCenter_common_2C.framework	  
AuthnCenter_PWLogin_2C.framework  
AuthnCenter_PWLogin_2C.bundle
1
2
3

将IDaaSSDK拖入工程,并且引入方式如下:

并且引入Pod的依赖包。

pod 'JWT', '~> 3.0.0-beta.14'

# Targets设置

  • IDaaS密码登录SDK最低版本可兼容ios 10。

  • Framework,Libraries,andEmbedded Content里添加主库和依赖包,且在Other Linker Flags增加-ObjC。

  • 在菜单栏选择TARGETS > Info > Custom iOS Target Properties > App Transport Security Settings > Allow Arbitrary Loads,如下图。

  • 配置bitcode,如下图,设置bitcode为NO。

# 开发集成

# 内置API介绍

  • 集成选择一种登录方法(用户名密码/手机号密码/邮箱密码/统一用户名密码),需要强制修改密码或跳过修改密码的调用(修改密码方法/跳过修改密码)。
  • 可以使用通过手机号找回密码。APP客户端构建自己的找回密码页面,需要有三个元素:手机号输入框、验证码输入框、获取验证码按钮、找回按钮。点击获取验证码按钮调用IDaaS:
    • SDK滑块验证的方法并且调用IDaaS。
    • SDK发送短信方法。收到验证码后,点击找回按钮,APP客户端调用IDaaS。
    • SDK找回密码方法。

# SDK初始化

将初始化的方法在appdelegate 中didFinishLaunchingWithOptions方法中初始化:

在appdelegate中引用如下
#import <AuthnCenter_common_2C /BCIDACommonManager.h>

//1. 基本配置初始化
[[[[[BCIDACommonManager sharedInstance] initWithDomain:@"https://你的服务端租户.com"] initWithClientID:@"服务端租户clientID"] initWithSSLCerVerification:NO] setLogEnabled:YES] ;
1
2
3
4
5

基本配置初始化主类BCIDACommonManager方法简介:

/**
  * 函数名:sharedInstance
   * @param 无
   * @return 单例对象实例类
 */
+ (instancetype )sharedInstance ;

/**
  * 函数名:initWithDomain
   * @param domain,以https://开头,以.com结尾。
   * @return 实例类
 */
-(BCIDACommonManager)initWithDomain:(NSString)domain

/**
  * 函数名:initWithClientID
   * @param client id。
   * @return 实例类
 */
-(BCIDACommonManager)initWithClientID:(NSString)clientID;

/**
  * 函数名:setLogEnabled
   * @param 布尔值是否开启log。
   * @return 实例类
 */
-(void)setLogEnabled:(BOOL)enable;

/**
  * 函数名:initWithSSLCerVerification
   * @param 布尔值设置ssl证书是否开启检测。
   * @return 实例类
 */
-(BCIDACommonManager*)initWithSSLCerVerification:(bool)sslCerVerification;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 手机国际区号获取

如果开启了国际号码支持 请自行先行调用国际区号获取接口,国际区号获取接口返回配置好的国际区号列表,并附有电话号码的正则表达式。下图中就是如何配置国际区号列表和首选区号。

IDaaS SDK提供了获取国际区号的API:

获取国际区号列表示例代码:

#import <AuthnCenter_common_2C/BCIDAInternationalPhoneCodeManager.h>


[BCIDAInternationalPhoneCodeManager getInternaltionalAreaCodeWithCompletionHandler:^(NSString * _Nonnull code, id  _Nonnull data) {
        __strong __typeof(weakSelf)strongSelf = weakSelf;
        dispatch_async(dispatch_get_main_queue(), ^{
            NSDictionary* dic=(NSDictionary*)data;
        //判断电话是否符合正则表达式 
 BOOL flag=  [strongSelf parseDictionary:dic andWithMoile:mobile];
            
        });
    }];
1
2
3
4
5
6
7
8
9
10
11
12

主类方法介绍:

/**
* 函数名:getInternaltionalAreaCodeWithCompletionHandler
* @brief:获取国际区号方法
* @param 
*@param 
* @param BCSMSGetInternationalAreaCodeHandlerBlock ()结果回调函数 code=0,data返回NSDictionary的结果
**/
+(void)getInternaltionalAreaCodeWithCompletionHandler:(BCSMSGetInternationalAreaCodeHandlerBlock)resultHander;
1
2
3
4
5
6
7
8

成功示例code=0,data的值:

{
	"phoneAreaCodeDefinitions": [
		{
			"areaCode": "86",
			"displayMapping": {
				"zh-TW": "中國大陸",
				"en": "China",
				"zh-CN": "中国大陆"
			},
			"countryCode": "CN",
			"mobileRegex": "^(\\+86){0,1}\\-?1\\d{10}$",
			"areaCodeSuffixes": []
		},
		{
			"areaCode": "852",
			"displayMapping": {
				"zh-TW": "中國香港",
				"en": "Hong Kong",
				"zh-CN": "中国香港"
			},
			"countryCode": "HK",
			"mobileRegex": "^(\\+852){1}\\-?0{0,1}[1,4,5,6,7,8,9](?:\\d{7}|\\d{8}|\\d{12})$",
			"areaCodeSuffixes": []
		},
		{
			"areaCode": "886",
			"displayMapping": {
				"zh-TW": "中國臺灣",
				"en": "Taiwan",
				"zh-CN": "中国台湾"
			},
			"countryCode": "TW",
			"mobileRegex": "^(\\+886){1}\\-?[6,7,9](?:\\d{7}|\\d{8})$",
			"areaCodeSuffixes": []
		},
		{
			"areaCode": "853",
			"displayMapping": {
				"zh-TW": "中國澳門",
				"en": "Macau",
				"zh-CN": "中国澳门"
			},
			"countryCode": "MO",
			"mobileRegex": "^(\\+853){1}\\-?0{0,1}[1,4,5,6,7,8,9](?:\\d{7}|\\d{8}|\\d{12})$",
			"areaCodeSuffixes": []
		},
		{
			"areaCode": "93",
			"displayMapping": {
				"zh-TW": "阿富汗",
				"en": "Afghanistan",
				"zh-CN": "阿富汗"
			},
			"countryCode": "AF",
			"mobileRegex": "^(\\+93){1}\\-\\d{6,11}",
			"areaCodeSuffixes": []
		}
	],
	"preferredAreaCode": "CN"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

返回参数形式:

参数名 中文名称 类型 描述
preferredAreaCode 首选国际区号 String 当前企业中心配置的首选国际区号
countryCode 国家地区代码 String 国家地区代码
areaCode 国际电话区号 String 国际电话区号
areaCodeSuffixes 国际电话区号后缀 String 国际电话区号后缀
mobileRegex 手机号格式正则 String 手机号格式正则
displayMapping 多语言显示名映射 String 多语言显示名映射

# 内置滑块校验

此滑块验证两个方法配合“通过手机号找回密码”和“手机号短信验证码注册”页面需要。

  1. 调用此方法前请先进行手机号格式检查。

  2. 点击(触发)发送验证码事件,App客户端调用IDaaS SDK的滑块验证方法,示例如下:

//导入请求头
#import <AuthnCenter_PWLogin_2C/BCPWSlideVerifyCodeManager.h>

//点击(触发)发送验证码事件
 [BCPWSlideVerifyCodeManager startSlidingVerifyCodePageWithMobileNumber:mobile andWithResultHandler:^(NSString * _Nonnull code, id  _Nonnull data) {
       
    //结果处理 

    }];
1
2
3
4
5
6
7
8
9

BCPWSlideVerifyCodeManager对象方法简介:

/**
* 函数名:startSlidingVerifyCodePageWithMobileNumber
* @brief:点击拉起滑块验证
*@ param mobile手机号:带区号“+86-13800000000”或者不带区号“13800000000”都可以。
*@param complete:异步结果回调:
1.滑块校验成功时返回code=0 data=滑块token
2.滑块校验失败时返回code=其他(参照错误码)
3.code=105,data=”用户关闭”是滑块框的关闭按钮被点击了,是为了让APP客户端收到用户关闭滑块的行为
**/

+(void)startSlidingVerifyCodePageWithMobileNumber:(NSString*)mobile andWithResultHandler:(BCPWSlideCodeHandlerBlock)resultHandler;
1
2
3
4
5
6
7
8
9
10
11

滑块校验code=0成功时,发送短信代码示例:

//忘记密码时候(通过手机号修改密码)type选择:
   pwSlideSMSSendType     type= pwSlideSMSForgetPassword;
 //手机号注册新用户时候type选择:
  pwSlideSMSSendType      type= pwSlideSMSRegist;

[BCPWSlideVerifyCodeManager sendSMSWithSlideResultWithToken:token andMobile:mobile andWithType:type andWithCallBack:^(NSString * _Nonnull code, id  _Nonnull data) {
        if ([code isEqualToString:@"0"]) {
            NSLog(@"短信发送成功--code=%@   data=%@",code,data);
        }else{
            NSLog(@"短信发送失败--code=%@   data=%@",code,data);

        }
        
    }];
1
2
3
4
5
6
7
8
9
10
11
12
13
14

发送短信对象BCPWSlideVerifyCodeManager方法简介:

/**
* 函数名:sendSMSWithSlideResultWithToken
* @brief:调用此方法发送短信,
*@ param token上个方法滑块验证成功后得到的token
*@ param mobile手机号
*@ param mobile(pwSlideSMSSendType枚举类型)type
当忘记密码需要发送短信验证码时候:入参type= pwSlideSMSForgetPassword
当注册新用户需要发送短信验证码时候:入参type= pwSlideSMSRegist

*@param complete:异步结果回调,短信发送成功时返回code=0,code=其他 是短信发送失败
**/

+(void)sendSMSWithSlideResultWithToken:(NSString*)token andMobile:(NSString*)mobile andWithType:(pwSlideSMSSendType)type andWithCallBack:(BCPWSendSMSHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13

# 用户名密码登录

代码示例:

//导入请求头
#import <AuthnCenter_PWLogin_2C/BCUserNamePWLoginManager.h>

//点击(触发)发送验证码事件
[[BCUserNamePWLoginManager sharedInstance] loginByUserName:userName andWithPassword:passWord andWithCallBackHandler:^(NSString * _Nonnull code, id  _Nonnull data) {            
 dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"结果==%@==%@",code,data);
            
            });
 }];
1
2
3
4
5
6
7
8
9
10

BCUserNamePWLoginManager对象方法简介:

/**
  * 函数名:sharedInstance
   * @param 无
   * @return 单例对象实例类
 */
+ (instancetype )sharedInstance ;

/**
* 函数名:loginByUserName
* @brief:用户名+密码登录,
登录成功code=0 data=session_token.
不成功返回code=错误码,data返回错误原因。
*@ param username用户名。
*@ param password密码。
*@param BCUserNamePWLoginHandlerBlock:异步结果回调包含两个返回参数NSString code,和id类型data:
1.code=0成功, data返回session_token和id_token,
2.code=101是提示需要修改密码或者密码即将过期,应该进行跳转
data =【status= PASSWORD_WARN】密码未过期但是即将过期
             【status= PASSWORD_EXPIRED】密码已过期必须修改
3.code=1 错误 data(NSDictionary类型)返回"error_code"和"error_msg"
**/

-(void)loginByUserName:(NSString*)username andWithPassword:(NSString*)password andWithCallBackHandler:(BCUserNamePWLoginHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

返回参数列表:

成功示例1(成功匹配用户返回session_token):
code=0
data=
{
    "session_token": "btsiBjx85prcZu6I6Ki057Tmw3nSF2VO",
    "id_token":内容,
    "expire": 432000,
    "status": "SUCCESS"
}
成功示例2(返回密码快过期流程):
code=101
data=
{
    "status": "PASSWORD_WARN",
	"state_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ7XCJ1c2VySWRcIjpcIjIwMjIwMjExMTY0NDUwNjk5LTE2M0QtNTVFMEI1RTRCXCIsXCJzdGF0dXNcIjpcIlBBU1NXT1JEX0VYUElSRURcIn0iLCJleHAiOjE2NDQ1NzEzNjAsImlhdCI6MTY0NDU2OTU2MCwianRpIjoiMTY0NDU2OTU2MDIwNDAifQ.WGk9GGQGmKsmo4UmCzKfiC9x1Fj0WBowdO7jEStMvB4",
	"data": "{\"maxLength\":18,\"minLength\":8,\"regEx\":\"^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![a-z0-9]+$)(?![a-z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)[a-zA-Z0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]{1,}$\",\"tip\":\"至少包含数字、大写字母、小写字母和特殊字符中的3种\"}"
}
成功示例3(返回密码已过期流程):
Code=101,
data=
{
    "status": "PASSWORD_EXPIRED",
    "state_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWJqZWN0Ijoie1wic3RhdGVcIjpcIlBBU1NXT1JEX1dBUk5cIixcInVzZXJJZFwiOlwiMjAyMTA3MjYxNzQwNTgxNDUtOTFCQy0xM0UwMTRBQkJcIn0iLCJpZCI6IjIwMjEwNzI2MTc0MDU4MTQ1LTkxQkMtMTNFMDE0QUJCIiwiZXhwIjoxNjI43MTkwLCJpYXQiOjEasd2Mjg4NDY1OTB9.-egHWNfNPIxNnM540_wTYMtFwB4C9ymznEPRiIC4we0",
    "data": "{\"maxLength\":18,\"minLength\":8,\"regEx\":\"^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![a-z0-9]+$)(?![a-z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)[a-zA-Z0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]{1,}$\",\"tip\":\"至少包含数字、大写字母、小写字母和特殊字符中的3种\"}"
}

错误示例
{
    "error_code": "Idaas.SDK.COMMON.1001",
    "error_msg": "Parameter X-client-id cannot be left blank."
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 手机号密码登录

代码示例:

//导入请求头
#import <AuthnCenter_PWLogin_2C/BCPhonePWLoginManager.h>

//点击(触发)登陆按钮
[[BCPhonePWLoginManager sharedInstance] loginByPhoneNumber:phoneStr andWithPassword:passWord andWithCallBackHandler:^(NSString * _Nonnull code, id  _Nonnull data) {           

            dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"结果==%@==%@",code,data);
            
            });
        }];
1
2
3
4
5
6
7
8
9
10
11

BCPhonePWLoginManager对象方法简介:

/**
  * 函数名:sharedInstance
   * @param 无
   * @return 单例对象实例类
 */
+ (instancetype )sharedInstance ;


/**
* 函数名:loginByPhoneNumber
* @brief:手机号+密码登录
*@ param username用户名。
*@ param password密码。
*@param BCPhonePWLoginHandlerBlock:异步结果回调包含两个返回参数NSString code,和id类型data:
1.code=0成功, data返回session_token和id_token,
2.code=101是提示需要修改密码或者密码即将过期,应该进行跳转
data =【status= PASSWORD_WARN】密码未过期但是即将过期
             【status= PASSWORD_EXPIRED】密码已过期必须修改
3.code=1 错误 data(NSDictionary类型)返回"error_code"和"error_msg"

**/
-(void) loginByPhoneNumber:(NSString*)mobile andWithPassword:(NSString*)password andWithCallBackHandler:(BCPhonePWLoginHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

返回参数列表:

成功示例1(成功匹配用户返回session_token):
code=0
data=
{
    "session_token": "btsiBjx85prcZu6I6Ki057Tmw3nSF2VO",
    "id_token":内容,
    "expire": 432000,
    "status": "SUCCESS"
}
成功示例2(返回密码快过期流程):
code=101
data=
{
    "status": "PASSWORD_WARN",
	"state_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ7XCJ1c2VySWRcIjpcIjIwMjIwMjExMTY0NDUwNjk5LTE2M0QtNTVFMEI1RTRCXCIsXCJzdGF0dXNcIjpcIlBBU1NXT1JEX0VYUElSRURcIn0iLCJleHAiOjE2NDQ1NzEzNjAsImlhdCI6MTY0NDU2OTU2MCwianRpIjoiMTY0NDU2OTU2MDIwNDAifQ.WGk9GGQGmKsmo4UmCzKfiC9x1Fj0WBowdO7jEStMvB4",
	"data": "{\"maxLength\":18,\"minLength\":8,\"regEx\":\"^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![a-z0-9]+$)(?![a-z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)[a-zA-Z0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]{1,}$\",\"tip\":\"至少包含数字、大写字母、小写字母和特殊字符中的3种\"}"
}
成功示例3(返回密码已过期流程):
Code=101,
data=
{
    "status": "PASSWORD_EXPIRED", 
    "state_token":"eyJhbGciOiJIUzI1NitFwmznEPRiIC4we0",
    "data": "{\"maxLength\":18,\"minLength\":8,\"regEx\":\"^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![a-z0-9]+$)(?![a-z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)[a-zA-Z0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]{1,}$\",\"tip\":\"至少包含数字、大写字母、小写字母和特殊字符中的3种\"}"
}

错误示例
{
    "error_code": "Idaas.SDK.COMMON.1001",
    "error_msg": "Parameter X-client-id cannot be left blank."
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 邮箱密码登录

代码示例:

//导入请求头
#import <AuthnCenter_PWLogin_2C/BCEmailPWLoginManager.h>

//点击(触发)登陆按钮
[[BCEmailPWLoginManager sharedInstance] loginByEmail:emailStr andPassword:passWord andWithCallBackHandler:^(NSString * _Nonnull code, id  _Nonnull data) {          
            dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"结果==%@==%@",code,data);
            
            });
        }];
1
2
3
4
5
6
7
8
9
10

BCEmailPWLoginManager对象方法简介:

/**
  * 函数名:sharedInstance
   * @param 无
   * @return 单例对象实例类
 */
+ (instancetype )sharedInstance ;


/**
* 函数名:loginByEmail
* @brief:手机号+密码登录,不成功返回code=错误码,data返回错误原因。发送密码成功code=0 data=session_token.
*@ param email用户名。
*@ param password密码。
*@param BCEmailPWLoginHandlerBlock:异步结果回调包含两个返回参数NSString code,和id类型data:
1.code=0成功, data返回session_token和id_token,
2.code=101是提示需要修改密码或者密码即将过期,应该进行跳转
data =【status= PASSWORD_WARN】密码未过期但是即将过期
             【status= PASSWORD_EXPIRED】密码已过期必须修改
3.code=1 错误 data(NSDictionary类型)返回"error_code"和"error_msg"

**/

-(void)loginByEmail:(NSString*)email andPassword:(NSString*)password andWithCallBackHandler:(BCEmailPWLoginHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

返回参数列表:

成功示例1(成功匹配用户返回session_token):
code=0
data=
{
    "session_token": "btsiBjx85prcZu6I6Ki057Tmw3nSF2VO",
    "id_token":"xxxxxx",
    "expire": 432000,
    "status": "SUCCESS"
}

成功示例2(返回密码快过期流程):
code=101
data=
{
    "status": "PASSWORD_WARN",
	"state_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ7XCJ1c2VySWRcIjpcIjIwMjIwMjExMTY0NDUwNjk5LTE2M0QtNTVFMEI1RTRCXCIsXCJzdGF0dXNcIjpcIlBBU1NXT1JEX0VYUElSRURcIn0iLCJleHAiOjE2NDQ1NzEzNjAsImlhdCI6MTY0NDU2OTU2MCwianRpIjoiMTY0NDU2OTU2MDIwNDAifQ.WGk9GGQGmKsmo4UmCzKfiC9x1Fj0WBowdO7jEStMvB4",
	"data": "{\"maxLength\":18,\"minLength\":8,\"regEx\":\"^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![a-z0-9]+$)(?![a-z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)[a-zA-Z0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]{1,}$\",\"tip\":\"至少包含数字、大写字母、小写字母和特殊字符中的3种\"}"
}

成功示例3(返回密码已过期流程):
Code=101,
data=
{
    "status": "PASSWORD_EXPIRED",
    "state_token":"e_wTYMtFwB4C9ymznEPRiIC4we0",
    "data": "{\"maxLength\":18,\"minLength\":8,\"regEx\":\"^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![a-z0-9]+$)(?![a-z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)[a-zA-Z0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]{1,}$\",\"tip\":\"至少包含数字、大写字母、小写字母和特殊字符中的3种\"}"
}

错误示例
{
    "error_code": "Idaas.SDK.COMMON.1001",
    "error_msg": "Parameter X-client-id cannot be left blank."
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 统一用户名密码登录

代码示例:

//导入请求头
#import <AuthnCenter_PWLogin_2C/BCAllInOnePWLoginManager.h>

//点击(触发)登陆按钮
[[BCAllInOnePWLoginManager sharedInstance] loginByAllInOneString:userName andWithPassword:passWord andWithCallBackHandler:^(NSString * _Nonnull code, id  _Nonnull data) {        

            dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"结果==%@==%@",code,data);
            
            });
        }];
1
2
3
4
5
6
7
8
9
10
11

BCAllInOnePWLoginManager对象方法简介:

/**
  * 函数名:sharedInstance
   * @param 无
   * @return 单例对象实例类
 */
+ (instancetype )sharedInstance ;

/**
* 函数名:loginByAllInOneString
* @brief:统一登录字段+密码登录,不成功返回code=错误码,data返回错误原因。发送密码成功code=0 data=session_token.
*@ param allStr统一登录字段。
*@ param password密码。
*@param BCAllInOnePWLoginHandlerBlock:异步结果回调包含两个返回参数NSString code,和id类型data:
1.code=0成功, data返回session_token和id_token,
2.code=101是提示需要修改密码或者密码即将过期,应该进行跳转
data =【status= PASSWORD_WARN】密码未过期但是即将过期
             【status= PASSWORD_EXPIRED】密码已过期必须修改
3.code=1 错误 data(NSDictionary类型)返回"error_code"和"error_msg"

**/
-(void)loginByAllInOneString:(NSString*)allStr andWithPassword:(NSString*)password andWithCallBackHandler:(BCAllInOnePWLoginHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

返回参数列表:

成功示例1(成功匹配用户返回session_token):
code=0
data=
{
    "session_token": "btsiBjx85prcZu6I6Ki057Tmw3nSF2VO",
    "id_token":内容,
    "expire": 432000,
    "status": "SUCCESS"
}

成功示例2(返回密码快过期流程):
code=101
data=
{
    "status": "PASSWORD_WARN",
	"state_token": "eyJhFj0WBowdO7jEStMvB4",
	"data": "{\"maxLength\":18,\"minLength\":8,\"regEx\":\"^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![a-z0-9]+$)(?![a-z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)[a-zA-Z0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]{1,}$\",\"tip\":\"至少包含数字、大写字母、小写字母和特殊字符中的3种\"}"
}
成功示例3(返回密码已过期流程):
Code=101,
data=
{
    "status": "PASSWORD_EXPIRED",
    "state_token":"eyJhbGciHWNfNPIxNnM540_wTYMtFwB4C9ymznEPRiIC4we0",
    "data": "{\"maxLength\":18,\"minLength\":8,\"regEx\":\"^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![a-z0-9]+$)(?![a-z~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)(?![0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]+$)[a-zA-Z0-9~!#$%&+\\\\-,*:;<=>@_?^、`~\\\\./]{1,}$\",\"tip\":\"至少包含数字、大写字母、小写字母和特殊字符中的3种\"}"
}

错误示例
{
    "error_code": "Idaas.SDK.COMMON.1001",
    "error_msg": "Parameter X-client-id cannot be left blank."
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 跳过修改密码

代码示例:

//导入请求头
#import <AuthnCenter_PWLogin_2C/BCPWPassWordUpdateManager.h>

//点击(触发)登陆按钮
[[BCPWPassWordUpdateManager sharedInstance] skipPassWordModifyWithStateToken:state_token andWithCallBackHandler:^(NSString * _Nonnull code, id  _Nonnull data) {
        NSString* msg=[NSString stringWithFormat:@"跳过修改密码后的结果:code=%@-------data=%@",code,data];
          }];
1
2
3
4
5
6
7

BCPWPassWordUpdateManager对象方法简介:

/**
  * 函数名:sharedInstance
   * @param 无
   * @return 单例对象实例类
 */
+ (instancetype )sharedInstance ;

/**
* 函数名:skipPassWordModifyWithStateToken
* @brief:跳过密码修改,仅限于登录接口返回status: "PASSWORD_WARN"时使用(当登录接口code=101)
*@ param state_token登录接口返回的state_token字段(当登录接口code=101)。
*@param BCSkipPasswordModifyHandlerBlock:异步结果回调
code=0成功,code=其他是失败
**/
-(void)skipPassWordModifyWithStateToken:(NSString*)state_token andWithCallBackHandler:(BCSkipPasswordModifyHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

返回参数:

code码 说明
code=0 成功 data返回NSDictionary: data=@{@"session_token":sessionToken内容,@"id_token":idToken内容};
code=其他 data=失败描述

# 修改密码

代码示例:

//导入请求头
#import <AuthnCenter_PWLogin_2C/BCPWPassWordUpdateManager.h>

//点击(触发)登陆按钮
[[BCPWPassWordUpdateManager sharedInstance] modifyPasswordWithStateToken:_state_token andWithNewPassword:nePass andWithOldPassword:oldPass andWithCallBackHandler:^(NSString * _Nonnull code, id  _Nonnull data) {
        NSString* str=[NSString stringWithFormat:@"code=%@-----data=%@",code,data];
        

    }];
1
2
3
4
5
6
7
8
9

BCPWPassWordUpdateManager对象方法简介:

/**
  * 函数名:sharedInstance
   * @param 无
   * @return 单例对象实例类
 */
+ (instancetype )sharedInstance ;

/**
* 函数名:modifyPasswordWithStateToken
* @brief:跳过密码修改,仅限于登录接口返回status: " PASSWORD_EXPIRED "时使用(当登录接口code=101)
*@ param state_token登录接口返回的state_token字段。
*@param newPassword
*@param oldPassword
*@param BCPWModifyPasswordHandlerBlock:异步结果回调
code=0成功,code=其他是失败
**/

-(void)modifyPasswordWithStateToken:(NSString*)state_token andWithNewPassword:(NSString*)newPassword andWithOldPassword:(NSString*)oldPassword andWithCallBackHandler:(BCPWModifyPasswordHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

返回参数:

code码 说明
code=0 成功 data返回NSDictionary: data=@{@"session_token":sessionToken内容,@"id_token":idToken内容};
code=其他 data=失败描述

# 通过手机号找回密码

App客户端需要构建自己的界面包括手机号输入框,点击获取验证码,验证码输入框,新密码输入框,提交按钮。点击获取验证码后请调用本文档中滑块验证获取验证码的方法。

//导入请求头
#import <AuthnCenter_PWLogin_2C/BCPWForgetPassWordManager.h>

//点击(触发)发送验证码事件
[[BCPWForgetPassWordManager sharedInstance] forgetPasswordChangePassWordByPhone:mobile andVerifyCode:verifyC andWithNewPassword:newPassword andWithCompletionHandler:^(NSString * _Nonnull code, id  _Nonnull data) {
        dispatch_async(dispatch_get_main_queue(), ^{
        NSString* str=[NSString stringWithFormat:@"code=%@------data=%@",code,data];
        });
        
    }];
1
2
3
4
5
6
7
8
9
10

BCPWForgetPassWordManager对象方法简介:

/**
  * 函数名:sharedInstance
   * @param 无
   * @return 单例对象实例类
 */
+ (instancetype )sharedInstance ;


/**
* 函数名:forgetPasswordChangePassWordByPhone
* @brief:通过手机号找回密码
*@ param mobile手机号:带区号“+86-13800000000”或者不带区号“13800000000”都可以。
*@ param verifyCode短信验证码
*@ param  newPassword新密码
*@param complete:BCPWforgetPasswordModifyByPhoneHandlerBlock异步结果回调,code=0修改密码成功,code=其他是失败。
**/
-(void)forgetPasswordChangePassWordByPhone:(NSString*)mobile andVerifyCode:(NSString*)verifyCode andWithNewPassword:(NSString*)newPassword andWithCompletionHandler:(BCPWforgetPasswordModifyByPhoneHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

返回参数:

code码 说明
code=0 成功 data=成功
code=其他 data=失败描述

# 手机号短信验证码注册

用户自己构建界面,手机号和验证码是必填项,可以使用IDaaS SDK的滑块验证发送短信的两个方法获取验证码。其余的个人信息参数是选填项。注册成功即登录成功返回session_token和id_token。

代码示例:

//导入请求头
#import <AuthnCenter_SMSLogin_2C/BCPWRegistByPhoneNumManager.h>

//点击注册
  [[BCPWRegistManager sharedInstance] registUserByPhone:mobile andWithVerifyCode:verifyCode andWithUserName:username andWithName:name andWithEmail:email andWithPassword:password andWithHeadImageURLStr:headIma andWithGender:gender andWithBirthDay:birthDay andWithNickName:nickName andWithAddress:address andWithZipCode:zipCode andWithFirstName:FirstNAme andWithMiddleName:middleName andWithLastName:lastName andWithIndustry:industry andWithExtension:nil andWithCompletionHandler:^(NSString * _Nonnull code, id  _Nonnull data) {
   }];
1
2
3
4
5
6

BCPWRegistManager对象方法简介:

/**
* 函数名:registUserByPhone
* @brief:用手机号注册新用户
*@ param mobile手机号(必填):带区号“+86-13800000000”或者不带区号“13800000000”都可以。
*@ param verifyCode(必填):短信验证码
*@param complete:BCPWRegistByPhoneHandlerBlock异步结果回调,code=0成功 data返回session_token和id_token,code=其他 是失败。
**/

-(void)registUserByPhone:(NSString*)mobile andWithVerifyCode:(NSString*)verifyCode andWithUserName:(NSString*)userName andWithName:(NSString*)name andWithEmail:(NSString*)email andWithPassword:(NSString*)password andWithHeadImageURLStr:(NSString*)headImageUrlStr andWithGender:(NSString*)gender andWithBirthDay:(NSString*)birthday andWithNickName:(NSString*)nickName andWithAddress:(NSString*)address andWithZipCode:(NSString*)zipCode andWithFirstName:(NSString*)firstName andWithMiddleName:(NSString*)middleName andWithLastName:(NSString*)lastName andWithIndustry:(NSString*)industry andWithExtension:(NSDictionary*)extendDic andWithCompletionHandler:(BCPWRegistByPhoneHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9

入参说明:

参数名 类型 必填 代码示例
mobile NSString 带区号“+86-13800000000”或者不带区号“13800000000”都可以
verifyCode NSString 以短信收到的验证码为准
userName NSString 用户名,英文字母和数字
name NSString 中文英文数字
email NSString 邮箱
password NSString 密码
headImageUrlStr NSString 头像url地址"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIQ8QOTSn3y4cYHLlMC3sv6RCBmeMkxtOog47Zr3v2Afbqc2bmP0WibUIUskX39eJlJ"
gender NSString 可选值有: female:女性; male:男性; unknow:保密, 这个参数会格式校验,如果不符合回调函数就会返回错误
birthday NSString 格式为: yyyy-MM-dd 这个参数会格式校验,如果不符合回调函数就会返回错误
nickName NSString 昵称,中英文数字
address NSString 地址
zipCode NSString 邮编
firstName NSString
middleName NSString 中间名
lastName NSString
industry NSString 行业
extendDic NSDictionary 以下面的格式传入后台新增的参数,age是企业中心新增配置的参数名。 { "age":"18" }

返回参数:

code码 说明
code=0 成功 Data返回NSDictionary: data= {"session_token":sessionToken内容,"id_token":idToken内容};
code=其他 data=失败描述

param入参示例:

{
  "user_name": "zhangsan",
  "name": "张三",
  "email": "15200000000@qq.com",
  "pwd": "QWE@qwe123",
  "head_img": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIQ8QOTSn3y4cYHLlMC3sv6RCBmeMkxtOog47Zr3v2Afbqc2bmP0WibUIUskX39eJlJ",
  "attr_gender":"male",
  "attr_birthday": "2022-02-17",
  "attr_nick_name": "张三",
  "mailing_address": "湖北省武汉市",
  "zip_code": "430000",
  "first_name": "zhangsan",
  "middle_name": "zhangsan",
  "last_name": "zhangsan",
  "industry": "事业单位",
  "extension": {
    "age":"18"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# IDToken校验和获取用户信息

在登录成功后会返回session_token和id_token。id_token可以用来获取用户信息和校验登录有效期。

流程:

  1. 校验idToken
  2. 从idtoken中获取用户信息(可以不通过校验直接调用此方法)

# 校验id_token

调用示例:

  [[BCIDAIDTokenManager sharedInstance] verifySignWithIdToken:idToken andWithCallBack:^(NSString * _Nonnull code, id  _Nonnull data) {
          }];
1
2

主类BCIDAIDTokenManager介绍:

/**
   * 函数名:sharedInstance
   * @param 无入参
   * @return返回对象单例实例
*/
+ (instancetype )sharedInstance;

/**
* 函数名:verifySignWithIdToken
* @brief:校验idtoken是否在登录有效期和应用一致的方法
* @param idToken登录时候返回的
* @param BCIDAIdTokenVerifyHandlerBlock回调函数:
NSString code
id       data
**/
-(void)verifySignWithIdToken:(NSString*)idToken andWithCallBack:(BCIDAIdTokenVerifyHandlerBlock)callback;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

返回值:

code(NSString) data data的数据类型和说明
0 success [NSString]验签成功
1 错误描述 [NSString]入参为空,sdk初始化参数domain和clientID没有设置
106 时间过期 [NSString]过期的idtoken
107 clientID不符合 [NSString]可能使用了其他应用的clientID
103 验签失败 [NSString]验签过程失败
102 获取公钥为空 [NSString]验签过程中错误
见文末错误码集合 见文末错误码集合 还可能返回文末的错误码

# 从idToken解析出用户信息

调用示例:

[[BCIDAIDTokenManager sharedInstance] getUserInfoFromIdTokenWithIdToken:idToken andWithCallBack:^(NSString * _Nonnull code, id  _Nonnull data) {
            
}];
1
2
3

主类BCIDAIDTokenManager介绍:

/**
   * 函数名:sharedInstance
   * @param 无入参
   * @return返回对象单例实例
*/
+ (instancetype )sharedInstance;

/**
* 函数名:getUserInfoFromIdTokenWithIdToken
* @brief:从idToken解析用户信息
* @param idToken登录返回的
* @param BCIDAIdTokenGetInfoHandlerBlock回调函数:
NSString code
id       data

**/
-(void)getUserInfoFromIdTokenWithIdToken:(NSString*)idToken andWithCallBack:(BCIDAIdTokenGetInfoHandlerBlock)callback;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

用户信息参数说明:

参数名 描述
iss 令牌签发人
aud 令牌接收者,应用的clientId
exp 令牌的过期时间
jti 令牌的id
iat 令牌的签发时间
sub 固定为subject
name 用户姓名
mobile 用户手机号
id 用户的id
userName 用户名
email 用户邮箱

回调函数返回值:

成功示例:
code=0
data=
{
	"id": "20220729174957176-2C7F-A2C54C293",
	"exp": 1659407592,
	"nbf": 1659407172,
	"mobile": "+86-13808603636",
	"jti": "7iwCYPo8EYcmLAD18x-CAw",
	"iss": "https:\/\/sdk2c.idaas-test-alpha.bccastle.com\/api\/v1\/oauth2",
	"userName": "zhangrui1",
	"sub": "20220729174957176-2C7F-A2C54C293",
	"aud": "S1ScicdIVR1QUbNs8TBz6BYVd2Zt8Adc",
	"iat": 1659407292,
	"email": "",
	"name": "zhangrui1"
}

失败示例
code=102
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 刷新IDToken

调用示例:

[[BCIDAIDTokenRefreshManager sharedInstance] refreshIdTokenWithSessionToken:sessionToken andWithCallBack:^(NSString * _Nonnull code, id  _Nonnull data) {
            NSString* jsonS=(NSString*)data;
         NSDictionary* dict=  [self dictionaryWithJsonString:jsonS];//解析jsonStr到NSDictionary
          NSString* idTok= [dict objectForKey:@"id_token"];
            NSString* session_tok=[dict objectForKey:@"session_token"];
            NSString* expr=[dict objectForKey:@"expire"];
                  }];
1
2
3
4
5
6
7

主类BCIDAIDTokenManager介绍:

/**
   * 函数名:sharedInstance
   * @param 无入参
   * @return返回对象单例实例
*/
+ (instancetype )sharedInstance;

/**
* 函数名:refreshIdTokenWithSessionToken
* @brief:刷新idToken
* @param sessionToken登录返回的
* @param BCIDAIdTokenRefreshIDTokenHandlerBlock回调函数:
NSString code
id       data

**/
-(void)refreshIdTokenWithSessionToken:(NSString*)sessionToken andWithCallBack:(BCIDAIdTokenRefreshIDTokenHandlerBlock)callBack;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

回调函数返回值:

成功示例:
code=0
data=
{
  "id_token" : "eyJraWQiOiJhODJkzJjLmlkYWFzLXRllKp6w",
  "session_token" : "apcOKuyry7kASh9h6mtf2G2GbettkyiU",
  "expire" : 7200
}

失败示例(获取不到数据)
code=1
1
2
3
4
5
6
7
8
9
10
11

# 返回码

状态码 错误码 (error_code) 错误说明 (error_msg) 处理措施
400 IDAAS.SDK.COMMON.1001 Parameter {0} cannot be left blank
参数 {0} 不能为空
400 IDAAS.SDK.COMMON.1002 The {0} parameter format is incorrect
参数 {0} 格式错误
400 IDAAS.SDK.COMMON.1003 Device information is incomplete
设备信息不完整
400 IDAAS.SDK.COMMON.1004 Signature decryption error
签名解密错误
400 IDAAS.SDK.COMMON.1005 The {0} has failed
{0} 已失效
400 IDAAS.SDK.COMMON.1006 The {0} parameter error
{0} 参数错误
400 IDAAS.SDK.COMMON.1007 The {0} parameter type error
{0}参数类型错误
500 IDAAS.SDK.COMMON.1008 The system is busy. Try again later
系统繁忙。稍后再试
400 IDAAS.SDK.COMMON.1009 Unknown authentication configuration
未知的认证配置
400 IDAAS.SDK.COMMON.1010 Failed to obtain the enterprise center global configuration
获取企业中心全局配置失败
400 IDAAS.SDK.COMMON.1011 Failed to obtain the international area code configuration
获取国际区号配置失败
400 IDAAS.SDK.COMMON.1012 The x-client-ID is incorrect and the corresponding application cannot be found
X-client-id错误,找不到对应的应用
400 IDAAS.SDK.COMMON.1013 The corresponding user is not found
未找到对应的用户
400 IDAAS.SDK.COMMON.1014 Application private key not found
未找到应用私钥
400 IDAAS.SDK.LOGIN.1001 Error calling interface {0}
调用 {0} 接口出错
400 IDAAS.SDK.LOGIN.1002 User not bound
用户未绑定
400 IDAAS.SDK.LOGIN.1003 The user has been locked due to too many unsuccessful login attempts. It will be unlocked in {0} minutes and {1} seconds
由于多次登录失败,用户已被锁定。 它将在 {0} 分钟和 {1} 秒内解锁
400 IDAAS.SDK.LOGIN.1004 Failed to obtain the password policy
获取密码策略错误
400 IDAAS.SDK.LOGIN.1005 Invalid username or password. Remaining login attempts: {0}
无效的用户名或密码。 其余登录尝试次数:{0}
400 IDAAS.SDK.LOGIN.1006 Configuration error, unable to find wechat authentication source
配置错误,找不到微信认证源
400 IDAAS.SDK.LOGIN.1007 Configuration error, unable to find alipay authentication source
配置错误,找不到支付宝认证源
400 IDAAS.SDK.LOGIN.1008 The configuration is incorrect. The one-click login authentication source cannot be found
配置错误,无法找到一键登录认证源
400 IDAAS.SDK.SMS.1001 {0} slide base map is not initialized successfully, please check the path
{0} 滑动底图未初始化成功,请检查路径
400 IDAAS.SDK.SMS.1002 {0} verification code coordinate resolution failed
{0} 验证码坐标解析失败
400 IDAAS.SDK.SMS.1003 {0} verification code coordinate verification fails
{0} 验证码坐标校验失败
400 IDAAS.SDK.SMS.1004 The graphic verification code is incorrect
图形验证码校验错误
400 IDAAS.SDK.SMS.1005 SMS verification code verification is incorrect
密码验证码验证错误
400 IDAAS.SDK.SMS.1006 The email verification code is incorrect
邮件验证码验证错误
400 IDAAS.SDK.SMS.1007 Sending scenario does not exist
发送场景不存在
400 IDAAS.SDK.SMS.1008 Failed to send the verification code
发送验证码失败
400 IDAAS.SDK.SOCIAL.1001 The social account is unbound incorrectly
社交账号解绑错误
400 IDAAS.SDK.SOCIAL.1002 The social account has been bound, please unbind it first
社交账号已绑定,请先解绑
400 IDAAS.SDK.PWD.1001 The password length is incorrect
密码长度错误
400 IDAAS.SDK.PWD.1002 The password cannot be the username
密码不能为用户名
400 IDAAS.SDK.PWD.1003 Your password complexity is low
你的密码复杂度过低
400 IDAAS.SDK.PWD.1004 The password is weak
密码很弱
400 IDAAS.SDK.PWD.1005 The password is used before, cannot be used again
该密码已被使用过,不能再次使用
400 IDAAS.SDK.PWD.1006 Password cannot username in reverse order
密码不能是用户名的倒序
400 IDAAS.SDK.PWD.1007 The number of repeated password characters exceeded the upper limit
密码重复字符数超过限制
400 IDAAS.SDK.PWD.1008 Password cannot contain :username, phone number, email prefix, name in PinYing
密码不能包含:用户名、电话号码、邮件前缀、拼音名
400 IDAAS.SDK.MFA.1001 The mobile doesn't match the user
手机号和用户不匹配
400 IDAAS.SDK.MFA.1002 The access control policy is incorrect
访问控制策略配置错误
400 IDAAS.SDK.MFA.1003 Access control authentication source type conversion error
访问控制身份验证源类型转换错误