App如何避免手动输入密码造成的安全风险?
Posted 华为移动服务
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了App如何避免手动输入密码造成的安全风险?相关的知识,希望对你有一定的参考价值。
问题场景
某开发者开发了一款应用,为了方便用户使用,增强用户粘性,同时收集用户信息,在浏览器中添加了线上登录的功能。本以为增加了功能可以扩大用户访问量,增加下载量,可没想到,随着功能的推广,下载访问量不仅没有增加,反而出现了下滑的趋势,这是怎么回事呢?
问题原因
随着开发者进一步调查研究,查访用户,发现问题就出在添加的新功能上。什么意思呢?
原来这款应用的在线登录功能支持的是在线手动输入密码,密码是7位数,为了保障用户的信息安全,开发者特地设置了密码乱序。意味着,每当用户登录需要输入密码时,都要经历一次7个数字的查找输入过程,由于输入过程较为复杂,给用户登录体验造成了不良影响。另一方面,手动输入密码的过程中没有得到安全保障。用户输入密码的环境,如果是开放的,对用户隐私安全就造成了威胁。
种种原因,对于粘性不强的用户,在第一次使用应用时,如果出现这样的情况,在开放不够安全的场景中,很可能直接关闭应用,甚至激发厌烦情绪,将应用卸载。这就导致开发者“好心办了坏事”,无意中流失了许多用户。
那么,如何解决这样一个问题呢?
如何避免线上手动输入密码造成的风险?
要解决这个问题,其实是要解决如何进行安全便捷的线上快速身份认证的问题。那么如何进行呢?思路如下:
- 使用生物特征或外设完成身份认证,避免密码泄露的风险
- 生物特征等用户个人隐私只在本地验证,保障用户个人隐私不泄露
- 规范成熟、应用广泛、生态完善,易与现有帐号基础设施集成
- 提供FIDO2漫游认证器功能,支持在其他设备上使用FIDO时,把华为手机作为漫游认证器辅助完成认证
要实现这些目标,就要使用到FIDO(线上快速身份验证服务)。
使用这个服务,用户可在初次登录目标网站后,选择开通指纹/人脸登录,之后再通过浏览器App,登录同一个网站帐号时,只需要指纹/刷脸快速认证即可。由于华为FIDO是以系统完整性检测结果作为前置条件,可以帮助保护用户在更安全的设备环境中进行认证。
那么如何实现这一强大便捷又安全的功能呢? 具体集成步骤如下:
1. 使用一个Activity实例初始化Fido2Client,可以写在Activity的onCreate方法中。
Fido2Client fido2Client = Fido2.getFido2Client(this);
2. 是从FIDO服务器获取一个挑战值以及注册或认证的策略。并且根据从FIDO服务器获取的这些信息,初始化一个认证或注册请求。
// Obtain the challenge value and related policy from the FIDO server, and initiate a Fido2RegistrationRequest
// request.
ServerPublicKeyCredentialCreationOptionsResponse response = fidoServer.getAttestationOptions(request);
if (!ServerStatus.OK.equals(response.getStatus())) {
Log.e(TAG, getString(R.string.reg_fail) + response.getErrorMessage());
showError(getString(R.string.reg_fail) + response.getErrorMessage());
}
PublicKeyCredentialCreationOptions publicKeyCredentialCreationOptions =
ServerUtils.convert2PublicKeyCredentialCreationOptions(fido2Client,response);
3. 调用getRegistrationIntent或getAuthenticationIntent用来初始化认证或注册流程。
4. 在Fido2IntentCallback中调用launchFido2Activity,拉起注册或认证界面
fido2Client.getRegistrationIntent(registrationRequest, registrationOptions, new Fido2IntentCallback() {
@Override
public void onSuccess(Fido2Intent fido2Intent) {
fido2Intent.launchFido2Activity(Fido2DemoMainActivity.this, Fido2Client.REGISTRATION_REQUEST);
}
@Override
public void onFailure(int errorCode, CharSequence errString) {
showError(getString(R.string.reg_fail) + errorCode + "=" + errString);
}
});
5. 在activity.onActivityResult中调用getFido2RegistrationResponse或getFido2AuthenticationResponse获取FIDO2客户端的注册或认证的响应。
switch (requestCode) {
// Receive the registration response.
case Fido2Client.REGISTRATION_REQUEST:
Fido2RegistrationResponse fido2RegistrationResponse = fido2Client.getFido2RegistrationResponse(data);
reg2Server(fido2RegistrationResponse);
break;
// Receive the authentication response.
case Fido2Client.AUTHENTICATION_REQUEST:
Fido2AuthenticationResponse fido2AuthenticationResponse =
fido2Client.getFido2AuthenticationResponse(data);
auth2Server(fido2AuthenticationResponse);
break;
default:
break;
}
>>访问华为线上快速身份验证服务官网,了解更多相关内容
>>获取华为线上快速身份验证服务开发指导文档
>>华为HMS Core官方论坛
>>华为线上快速身份验证服务开源仓库地址:GitHub、Gitee
点击右上角头像右方的关注,第一时间了解华为移动服务最新技术~
以上是关于App如何避免手动输入密码造成的安全风险?的主要内容,如果未能解决你的问题,请参考以下文章
每次Access连接到SQL Server而不使用Windows身份验证时,如何避免手动输入登录名和密码