客户身份(CIAM)

手机号一键登录

# 文档说明

本文为您介绍Android客户端如何接入一键登录功能。使用一键登录用户无需输入手机号码,SDK会拉起授权页,用户确认授权后,SDK会获取token,服务端携带token到运营商网关获取用户当前上网使用的号码,最终认证结果返回给App服务端。竹云IDaaS一键登录SDK基于阿里云“号码认证”SDK进行了封装。

# 术语说明

一键登录功能,即号码认证,整合三大运营商特有的数据网关认证能力,升级短信验证码方式,应用于用户注册、登录等场景。

# 流程说明

集成流程说明

  1. 注册阿里云的私钥和IDaaS服务端的配置参数到IDaaS SDK。
  2. 终端网络检测,通过阿里云服务端检查网络环境是否可行,若用户开启了4G流量且网络通畅,成功调用IDaaS SDK并拉起授权页面。
  3. 用户确认授权页面的内容,并同意相关协议。IDaaS SDK会获取授权TOKEN,传递到IDaaS服务端。
  4. IDaaS服务端使用TOKEN到阿里云服务端获取用户手机号后,发起认证,若认证成功,则返回sessionToken,可保存到App客户端或用于其他;若认证不成功,返回错误码和原因,进行下一步跳转。

# 对接流程

# 准备工作

# 注册阿里云账号

参考阿里云官网开通账号流程 (opens new window)认证方案管理 (opens new window)

# 开通号码认证功能

  1. 访问号码认证服务产品详情页以企业用户开通购买

  2. 单击立即开通或访问产品控制台。

  3. 进入控制台首页,勾选我已阅读并同意《号码认证服务协议》。

  4. 单击立即开通,完成产品开通。

  5. 登录号码认证服务控制台 (opens new window),在标准版选项卡,下载并解压阿里云Android SDK。

# 添加认证方案

  1. 在阿里云“号码认证”服务中添加认证方案,填写当前工程的包名以及对应的签名。

  2. 填写完成后点击确定,保存配置,获取密钥保存在app本地,在PlatformConfig中初始化时候使用,参见SDK初始化的步骤。

# 配置IDaaS后台认证源

  1. 登录IDaaS企业中心,选择菜单认证-》认证源管理-》内置认证源,点击“本机号码一键登录”。

  2. 弹出“本机号码一键登录”配置页面,相关的参数参见下一步骤“从阿里云工作台中获得对应的配置信息”。

    配置本机号码一键登录需要的参数配置说明:

    参数 参数说明
    号码认证服务商 默认阿里云
    Access Key ID 填入阿里云创建用户时候产生的AccessKey
    AccessKey Secret 填入阿里云创建用户时候产生的AccessKey Secret
  3. 在阿里云工作台创建用户,勾选下框,参考如何获取AccessKey (opens new window)获取相关参数,将获得的参数配到上一步骤页面中(此步骤为后端接入时需要的相关参数)。

# 获取ClientId

  1. 登录IDaaS企业中心,点击【资源】-【应用】,添加自建应用,认证集成选择SDK/API并保存。

  2. 在应用信息中获取ClientID。

# 环境搭建

# 引入依赖包

登录号码认证服务控制台 (opens new window),在标准版选项卡,下载并解压Android SDK。

auth_number_product-2.13.3-log-online-standard-cuum-release.aar//阿里云一键登录SDK 
crashshield-2.1.3.2-release.aar //阿里云crash 记录SDK 
main-2.2.2-release.aar // SDK内部的一些核心工具类,比如线程池、json解析等。 
logger-2.2.2-release.aar //SDK内部用于收集日志信息和监控告警的
AuthnCenter_MobileNumberAuth_1.5.3.arr   //IDaaS一键登录SDK
1
2
3
4
5

# 配置build.gradle

将arr包放在App工程下的libs目录下,在bulid.gradle中写入以下代码。

/*begin*/
/*  rxjava2 +  okhttp + retrofit2  */
api 'io.reactivex.rxjava2:rxjava:2.2.10'
api 'io.reactivex.rxjava2:rxandroid:2.1.1'
api 'com.squareup.retrofit2:retrofit:2.6.0'
api 'com.squareup.retrofit2:adapter-rxjava2:2.6.0'
api 'com.squareup.retrofit2:converter-gson:2.6.0'
api 'com.squareup.okhttp3:okhttp:4.3.1'
api 'com.squareup.okhttp3:logging-interceptor:3.6.0'
api 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
api 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
api 'com.alibaba:fastjson:1.2.61'
 /*end*/
implementation(name: 'AuthnCenter_MobileNumberAuth_1.5.3', ext: 'aar')
implementation(name: 'auth_number_product-2.13.3-log-online-standard-cuum-release', ext: 'aar') 
implementation(name: 'crashshield-2.1.3.2-release', ext: 'aar') 
implementation(name: 'main-2.2.2-release', ext: 'aar') 
implementation(name: 'logger-2.2.2-release', ext: 'aar')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

注意:如果在 Run的时候报以下错误:More than one file was found with OS independent path 'lib/x86/libauth_number_product-2.12.3.4-log-online-standard-release_alijtca_plus.so',直接注释掉引入即可。

//implementation(name: 'auth_number_product-2.12.3.4-log-online-standard-release', ext: 'aar')*

# 升级为AndroidX项目

由于阿里云的SDK版本必须是AndroidX版本作为支持,所以需要将现有的项目改为AndroidX版本。

  • 先备份原有项目。

  • 在gradle.properties中新增以下配置

    android.useAndroidX=true 
    android.enableJetifier=true
    
    1
    2
  • 升级为AndroidX项目

​ 在Android Studio中,依次点击Refactor -> Migrate to AndroidX -> Migrate -> Do refactor。即可将本项目转化为Androidx。(注意:本次操作前,请先备份原项目

  • 编译项目

# 配置AndroidManifest


 <!--权限-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEM"/>
        
        <!--重点关注!!!!!!!-->
<!--如果不需要使用窗口模式,不要使用authsdk_activity_dialog主题,会出现异常动画-->
<!--如果需要使用authsdk_activity_dialog主题,则screenOrientation一定不能指定明确的方向,
比如portrait、sensorPortrait,在8.0的系统上不允许窗口模式指定orientation,会发生crash,需要指定为behind,
然后在授权页的前一个页面指定具体的orientation-->
<activity
    android:name="com.mobile.auth.gatewayauth.LoginAuthActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:exported="false"
    android:launchMode="singleTop"
    android:screenOrientation="behind"
    android:theme="@style/authsdk_activity_dialog" />

<activity
    android:name="com.mobile.auth.gatewayauth.activity.AuthWebVeiwActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:exported="false"
    android:launchMode="singleTop"
    android:screenOrientation="behind" />
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

# 配置 http 支持

在res目录下新建一个xml复制以下内容 ,在application引入。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">enrichgw.10010.com</domain> <!-- 联通内部5G请求域名,开发者需要添加 -->
        <domain includeSubdomains="true">onekey.cmpassport.com</domain>  <!-- 移动内部请求域名,开发者需要添加 -->
    </domain-config>
</network-security-config>
1
2
3
4
5
6
7

# 开发集成

# SDK初始化

将添加认证方案中获取的密钥保存在app端,在app的入口地方,注册密钥到IDaaS SDK。

AuthnCenterSDK.Builder()
                .init(this)
                .setBaseUrl("https://xxx.xxx.com")      //租户域名 
                .setClientId(xxxx") //租户后台应用client-id
                .isCheckSSL(false) //是否检测SSL证书
                .logEnable(false).build(); //是否打开http请求log
//初始化 一键登录应用密钥
PlatformConfig.Builder().init(this).setAliOneKeyLoginSecret(“阿里云应用密钥”); 
1
2
3
4
5
6
7
8

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

/**
 *  设置IDaas访问地址    
 * @param baseUrl  分配的IDaaS 地址
 * @return
 */
public AuthnCenterSDK setBaseUrl(String baseUrl)
/**
 *  添加请求头
 * @param name  请求头名称
 * @param value 请求头值
 * @return
 */
public AuthnCenterSDK addGlobalHeader(String name, String value)
/**
 *  是否开启SSL校验  只针对HTTPS有效
 * @param isCheck    true 开启  false 关闭
 * @return
 */
public AuthnCenterSDK isCheckSSL(boolean isCheck)
/**
 *  是否开启日志
 * @param isOpen    true 开启  false 关闭
 * @return
 */
public AuthnCenterSDK logEnable(boolean isOpen) 
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

一键登录初始化主类AuthnCenterMobileNumberAuthAliYun方法简介:

 /**
 *   初始化一键登录
 * @param context  Android上下文 
 * @param loginListener 回调
 * @return
 */
public AuthnCenterMobileNumberAuthAliYun init(@NotNull Context context, @NotNull AliOneStepListener loginListener)

/**
 *   一键登录方法 
 * @param config   UI  
 */
public void oneKeyLogin(UiConfig config)


 /**
 *  一键登录回调事件   
 */
public interface AliOneStepListener
{
 
/**
 *  成功     
 * @param code   固定成功code 码为  1002
 * @param data   sessionToken 
 */
void success(String code, String data);

/**
 *  失败  
 * @param code  异常错误码为  1001  其它错误码则为相关服务商返回
 * @param msg
 */
void error(String code, String msg);
}


/**
 *  UI配置抽象类,定义UI时需要继承并实现 configAuthPahe()方法
*   可参考示例代码 或者阿里云自定义UI代码片段  
 */   
public abstract class UiConfig {

    public abstract void configAuthPage();

}
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

调用示例:

AuthnCenterMobileNumberAuthAliYun.Builder().init(this, new AliOneStepListener() {
    @Override
    public void success(String code, String data) {
    }
    @Override
    public void error(String code, String msg) {
    }
});

//唤起一键登录
AuthnCenterMobileNumberAuthAliYun.Builder().oneKeyLogin(uiConfig);
1
2
3
4
5
6
7
8
9
10
11

# 环境检测

App客户端使用一键登录功能,需先通过阿里云的检测方法来检测环境是否合适。终端手机需满足4G环境下才能被调用成功。

PhoneNumberAuthHelper对象方法简介:

 /**
 * SDK环境检查函数,检查终端是否⽀持号码认证,通过TokenResultListener返回code
 * type 1:本机号码校验 2: ⼀键登录
 * 600024 终端⽀持认证
 * 600013 系统维护,功能不可⽤
 */
public void checkEnvAvailable(@IntRange(from = 1, to = 2) int type)
1
2
3
4
5
6
7

调用示例:


AuthnCenterMobileNumberAuthAliYun.Builder().mPhoneNumberAuthHelper.checkEnvAvailable(2);
1
2

检测成功后,可以调用加速的一个方法,加速一键登录授权页弹起,防止调用一键登录拉起等待弹起授权页时间过长(根据实际情况使用不是必须)。

 /**
 * 加速授权⻚唤起
 *
 * @param overdueTime  预取号有效期
 * @param listener 预取号回调
 */
public void accelerateLoginPage(final int overdueTime, final PreLoginResultListener listener)

1
2
3
4
5
6
7
8

此接口主要用于手动输入手机号点击确定 加速获取token使用。

一键登录场景一般不涉及此接口,SDK内置封装的为 getLoginToken接口,默认使用SDK内置一键登录登录方法即可。

如有其它功能且不想使用SDK内置一键登录,可直接使用阿里云SDK原生方法进行调用,只需要把原生事件TokenResultListener更换为AliYunTokenListener 即可。

# 唤起授权页面

环境检测成功后,拉起IDaaS SDK的一键登录方法。

示例代码:

//唤起一键登录
AuthnCenterMobileNumberAuthAliYun.Builder().oneKeyLogin(uiConfig);
1
2

IDaaS SDK默认的一键登录页面,包含脱敏显示的号码、返回按钮、复选框协议签署以及其他方式登录的按钮。以上组件的样式、文字描述可定制化。

其中,本机号码一键登录、返回以及其他方式登录按钮,点击操作后,IDaaS SDK将向App客户端发起回调,返回内容为返回码和相关数据,并关闭窗口,即操作完成;复选框协议签署,操作后回调函数给出相关数据,窗口不会被关闭。

调用失败示例:

调用成功示例:

调用成功之后 可根据返回的sessionToken 换取用户详细信息,具体可参考服务端API文档介绍。

# 关闭加载和登录界面

AuthnCenterMobileNumberAuthAliYun.*Builder*().**mPhoneNumberAuthHelper**.hideLoginLoading();
*//关闭 loading*  
AuthnCenterMobileNumberAuthAliYun.*Builder*().**mPhoneNumberAuthHelper**.quitLoginPage();
*//关闭 一键登录界面*
1
2
3
4

# 授权界面设计

确保用户在登录过程中将手机号码信息授权给开发者使用的知情权,一键登录需要开发者提供授权页登录页面供用户授权确认。开发者在调用授权登录方法前,必须弹出授权页,明确告知用户当前操作会将用户的本机号码信息传递给应用。

示例代码如下,详细代码可参考demo。


mAuthHelper.removeAuthRegisterXmlConfig();
mAuthHelper.removeAuthRegisterViewConfig();
//添加自定义切换其他登录方式
mAuthHelper.addAuthRegistViewConfig("switch_msg", new AuthRegisterViewConfig.Builder()
        .setView(initSwitchView(350))
        .setRootViewId(AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY)
        .setCustomInterface(new CustomInterface() {
            @Override
            public void onClick(Context context) {
                Toast.makeText(mContext, "切换到短信登录方式", Toast.LENGTH_SHORT).show();

                mAuthHelper.quitLoginPage();
            }
        }).build());
int authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
if (Build.VERSION.SDK_INT == 26) {
    authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_BEHIND;
}
mAuthHelper.setAuthUIConfig(new AuthUIConfig.Builder()
        .setAppPrivacyOne("《自定义隐私协议》", "https://www.qq.com")
        .setAppPrivacyTwo("《百度》", "https://www.baidu.com")
        .setAppPrivacyColor(Color.GRAY, Color.parseColor("#002E00"))
        //隐藏默认切换其他登录方式
        .setSwitchAccHidden(true)
        //隐藏默认Toast
        .setLogBtnToastHidden(true)
        //沉浸式状态栏
        .setNavColor(Color.parseColor("#026ED2"))
        .setStatusBarColor(Color.parseColor("#026ED2"))
        .setWebViewStatusBarColor(Color.parseColor("#026ED2"))


        .setLightColor(false)
        .setWebNavTextSizeDp(20)
        //图片或者xml的传参方式为不包含后缀名的全称 需要文件需要放在drawable或drawable-xxx目录下 in_activity.xml, mytel_app_launcher.png
        .setAuthPageActIn("in_activity", "out_activity")
        .setAuthPageActOut("in_activity", "out_activity")
        .setVendorPrivacyPrefix("《")
        .setVendorPrivacySuffix("》")
        .setPageBackgroundPath("page_background_color")
        .setLogoImgPath("mytel_app_launcher")
        //一键登录按钮三种状态背景示例login_btn_bg.xml
        .setLogBtnBackgroundPath("login_btn_bg")
        .setScreenOrientation(authPageOrientation)
        .create());
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

# 阿里云返回码

返回码 返回码描述 建议
600000 获取Token成功 无。
600001 唤起授权页成功 无。
600002 唤起授权页失败 建议切换到其他登录方式。
600004 获取运营商配置信息失败 创建工单联系工程师。
600005 手机终端不安全 切换到其他登录方式。
600007 未检测到SIM卡 提示用户检查SIM卡后重试。
600008 移动数据网络未开启 提示用户开启移动数据网络后重试。
600009 无法判断运营商 创建工单联系工程师。
600010 未知异常 创建工单联系工程师。
600011 获取Token失败 切换到其他登录方式。
600012 预取号失败 无。
600013 运营商维护升级,该功能不可用 创建工单联系工程师。
600014 运营商维护升级,该功能已达最大调用次数 创建工单联系工程师。
600015 接口超时 切换到其他登录方式。
600017 App ID、App Key解析失败 密钥未设置或者设置错误,请先检查密钥信息,如密钥无问题创建工单联系工程师。
600021 点击登录时检测到运营商已切换 切换到其他登录方式。
600023 加载⾃定义控件异常 检查⾃定义控件添加是否正确。
600024 终端环境检查⽀持认证 无。
600025 终端检测参数错误 检查传⼊参数类型与范围是否正确。
600026 授权页已加载时不允许调用加速或预取号接口 检查是否有授权页拉起后,调用preLogin或者accelerateAuthPage接口的行为不被允许。

授权页点击事件响应码:

响应码 响应码描述
700000 点击返回,⽤户取消免密登录。
700001 点击切换按钮,⽤户取消免密登录。
700002 点击登录按钮事件。
700003 点击check box事件。
700004 点击协议富文本文字事件。

# 运营商错误码

# 中国移动

返回码 返回码描述
103000 成功。
102507 登录超时(授权页点登录按钮时)。
103101 请求签名错误。
103102 包签名或Bundle ID错误。
103111 网关IP错误或错误的运营商请求。
103119 AppID不存在。
103211 其他错误,请提工单联系工程师。
103412 无效的请求有加密方式错误、非JSON格式和空请求等。
103414 参数校验异常。
103511 服务器IP白名单校验失败。
103811 Token为空。
103902 短时间内重复登录,造成script失效。
103911 Token请求过于频繁,10分钟内获取Token且未使用的数量不超过30个。
104201 Token重复校验失败、失效或不存在。
105018 使用了本机号码校验的Token获取号码,导致Token权限不足。
105019 应用未授权。
105021 已达当天取号限额。
105302 AppID不在白名单。
105313 非法请求。
200005 用户未授权(READ_PHONE_STATE)。
200010 无法识别SIM卡或没有SIM卡(Android)。
200020 用户取消登录。
200021 数据解析异常。
200022 无网络。
200023 请求超时。
200024 数据网络切换失败。
200025 位置错误(一般是线程捕获异常、socket、系统未授权移动数据网络权限等,请提工单联系工程师)。
200026 输入参数错误。
200027 未开启移动数据网络或网络不稳定。
200028 网络请求出错。
200038 异网取号网络请求失败。
200039 异网取号网关取号失败。
200048 用户未安装SIM卡。
200050 EOF异常。
200061 授权页面异常。
200064 服务端返回数据异常。
200072 CA根证书校验失败。
200082 服务器繁忙。
200086 ppLocation为空。
200087 仅用于监听授权页成功拉起。
200096 当前网络不支持取号。

# 中国联通

返回码 返回码描述
0 表示请求成功。
-10008 JSON转换失败。
1,请求超时 请求超时。
1,私网IP查找号码失败 私网IP查找号码失败。
1,私网IP校验错误 私网IP校验错误。
1,源IP鉴权失败 源IP鉴权失败。
1,获取鉴权信息失败 获取鉴权信息失败。
1,获得的手机授权码失败 一般是由于请求SDK超时导致的失败。
1,网关取号失败 网关取号失败。
1,网络请求失败 网络请求失败。
1,验签失败 签名校验失败。
1,传入code和AppID不匹配 传入code和AppID不匹配。
1,似乎已断开与互联网的链接 网络不稳定导致连接断开。
1,此服务器的证书无效 连接到不安全的服务器,提工单联系工程师。
1,PIP校验不通过 提工单联系工程师。
1,网关并发连接数受限 提工单联系工程师。
1,目前不允许数据链接 提工单联系工程师。
1,无法连接到服务器 提工单联系工程师。
1,系统内部错误 提工单联系工程师。
1,取号网关内部错误 取号网关内部错误,提工单联系工程师。
1,connect address error 连接地址错误,一般是由于超时导致失败。
1,select socket error 选择socket错误。
1,handshake failed 握手失败。
1,decode ret_url fail URL解码失败。
1,connect error 连接错误。
1,read failed 提工单联系工程师。
1,response null 无响应,提工单联系工程师。
1,未知错误 提工单联系工程师。
2,请求超时 接口请求耗时超过timeout设定的值。

# 中国电信

返回码 返回码描述
-64 Permission-denied(无权限访问)。
-65 API-request-rates-Exceed-Limitations(调用接口超限)。
-10001 取号失败,mdn为空。
-10002 参数错误。
-10003 解密失败。
-10004 IP受限。
-10005 异网取号回调参数异常。
-10006 mdn取号失败,且属于电信网络。
-10007 重定向到异网取号。
-10008 超过预设取号阈值。
-10009 时间戳过期。
-10013 Perator_unsupported,提工单联系工程师。
-20005 Sign-invalid(签名错误)。
-8001 网络异常,请求失败。
-8002 请求参数错误。
-8003 请求超时。
-8004 移动数据网络未开启。
-8010 无网络连接(网络错误)。
-720001 Wi-Fi切换4G请求异常。
-720002 Wi-Fi切换4G超时。
80000 请求超时。
80001 网络连接失败、网络链接已中断、Invalid argument、目前不允许数据连接。
80002 响应码错误404。
80003 网络无连接。
80005 socket超时异常。
80007 IO异常。
80008 No route to host.
80009 Nodename nor servname provided, or not known.
80010 Socket closed by remote peer.
80800 Wi-Fi切换超时。
80801 Wi-Fi切换异常。

# IDaaS返回码

状态码 错误码 (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
访问控制身份验证源类型转换错误