客户身份(CIAM)

短信登录

# 文档说明

本文为您介绍Android客户端如何接入短信登录功能。短信登录功能,即向用户手机号发送短信验证码,用户凭借手机号和短信验证码到IDaaS服务端认证。

# 流程说明

短信登录使用场景:用户输入手机号,点击获取短信验证码按钮,拉起滑块校验,校验成功后,IDaaS后台发送短信验证码到此手机号。用户输入验证码,点击登录后,IDaaS后台认证,返回票据。最终认证结果返回给App。

# 短信登录流程

集成流程说明

  1. 用户输入手机号,App客户端检查手机号是否符合格式规则。用户点击获取验证码。

  2. App客户端调用滑块验证方法,IDaaS SDK请求IDaaS后端滑块校验初始化信息,在页面展示滑块校验窗口。

  3. 用户拖动滑块,完成滑块校验,IDaaS SDK完成采集滑块校验信息,请求IDaaS服务端进行校验。

  4. IDaaS服务端完成滑块校验成功,返回token给IDaaS SDK。

  5. IDaaS SDK拿到token,用token请求IDaaS服务端发送短信。

  6. 用户接收到短信,填入验证码,点击登录。

  7. App客户端用手机号和验证码,调用IDaaS SDK的短信登录方法。

  8. IDaaS SDK 请求短信登录,IDaaS 服务端发起认证流程,认证成功返回Session token给IDaaS SDK;认证不成功返回错误码和信息给IDaaS SDK。

  9. IDaaS SDK拿到登录结果,返回给App客户端,App客户端通过结果进入app自己的流程。

# 环境搭建

# 引入依赖包

AuthnCenter_Common-1.5.3.aar //Common 包
AuthnCenter_SMSLogin-1.5.3.aar //短信登录 sdk
1
2

# 配置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'
/*end*/

/*begin*/
/*  fastjson  */
api 'com.alibaba:fastjson:1.2.61'
/*end*/

/*begin*/
/*  AuthnCenter_Common+ AuthnCenter_SMSLogin */
implementation(name: 'AuthnCenter_Common-1.5.3', ext: 'aar')
implementation(name: 'AuthnCenter_SMSLogin-1.5.3.aar', ext: 'aar')
/*end*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 配置AndroidManifest

此模块SDK 无特殊声明与注册。

# 开发集成

# SDK初始化

AuthnCenterSDK.Builder()
                .init(this)
                .setBaseUrl("https://xxx.xxx.com")      //租户域名
                .setClientId("xxxx") //租户后台应用client-id
                .isCheckSSL(false) //是否检测SSL证书
                .logEnable(false).build(); //是否打开http请求log
1
2
3
4
5
6

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


/**
 * 短信验证码 -- 发送短信
 */
public void smsSend(Context context, SendSmsReq req, RequestListener listener)

/**
 * 获取国家区号    注意 如果配置了国家区号需要调用此接口获取国家区号
 */
public void getCountryCode(Context context, RequestListener listener)

1
2
3
4
5
6
7
8
9
10
11

内置滑动校验:


BlockPuzzleDialog mBlockPuzzleDialog = new BlockPuzzleDialog(mContext);
mBlockPuzzleDialog.setOnResultsListener(new OnResultsListener() {
        @Override
        public void onResultsClick(String result) {
            LogUtil.getInstance().d("二次校验回调结果 mCaptchaToken:" + result);
            //这个回调结果就是短信校验的captchaToken参数
        }
        @Override
        public void onError(String code, String msg) {
            ToastUtils.ShowToast(mContext, String.format("错误码 : %s  错误信息 : %s", code, msg));
        }
    });
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

调用顺序:

(1)如果开启了国际号码支持 请自行先行调用国际区号获取接口,进行界面绑定与展示并在需要传入手机号的方法上,自行组装国际区号(例如:+86-13800000000)传入即可 ,如未开启支持 则忽略此接口。
(2)调用滑块校验 (BlockPuzzleDialog )         传入手机号
(3)调用发送短信验证码(smsSend)            传入手机号 滑动校验结果 
(4)调用短信登录方法(smsLogin)             传入手机号 短信验证码
1
2
3
4

# 发送短信验证

App客户端需要有自己的UI界面,界面包含几个必要组件:手机号输入框,验证码输入框,触发获取验证码的按钮(或者事件),登录的按钮(或者事件)。

  1. 在用户填入手机号码后,点击(触发)发送验证码事件之前,App客户端做手机号格式检查。

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

//发送验证码
SendSmsReq sendSmsReq = new SendSmsReq();
sendSmsReq.setMobile(getPhoneNum());
sendSmsReq.setType(SendSmsType.login);
sendSmsReq.setCaptcha_token(“滑动验证码成功之后返回结果”);
AuthnCenterAPI.Builder().smsSend(mContext, sendSmsReq
        , new RequestListener<BaseResponse>() {
            @Override
            public void success(BaseResponse rsp) {
            }
            @Override
            public void error(String code, String errorMessage) {
            }
        });
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 手机号和短信验证码登录

完成上一个验证码发送,用户收到短信验证码,填入验证码框,触发登录事件,此时App客户端调起短信登录流程,示例代码如下:

AuthnCenterSMSLogin.Builder().smsLogin(mContext, moblie, verifyCode, new LoginListener() {
    @Override
    public void success(String code, String data) {
        ToastUtils.ShowToast(mContext, "短信登录成功,返回数据为:" + data);
    }

    @Override
    public void error(String code, String msg) {
        ToastUtils.ShowToast(mContext, msg);
    }
});
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
访问控制身份验证源类型转换错误