# 接入 MFA
多因素身份验证(MFA)是一种安全系统,是为了验证一项操作合法性而实行多种身份验证。例如银行的 U 盾,异地登录要求手机短信验证。阅读本教程后,你可以自己为 Authing 的 MFA 二次认证定制化开发登录界面。
# 前期准备
# API 接口
# 查询用户开启的 MFA 信息
GET
https://core.authing.cn/api/v2/mfa/authenticator
查询用户开启的 MFA 信息
返回用户开启的 MFA 信息
# 请求绑定 MFA 口令
POST
https://core.authing.cn/api/v2/mfa/totp/associate
获取 MFA 二维码以及 Secret 信息,用于展示,等待用户确认绑定
请求此接口后,用户确认绑定之前,MFA 二次认证不会生效。接口返回 MFA Secret,MFA Uri,MFA 二维码 Data Url,恢复代码。
# 确认绑定 MFA 口令
POST
https://core.authing.cn/api/v2/mfa/totp/associate/confirm
确认绑定 MFA。
请求此接口后,用户确认绑定 MFA,之后登录会要求输入二次验证 MFA 口令。
# 一次认证后返回 MFA Token
调用 authing-js-sdk 中的登录方法,参考登录。或者直接调用 GraphQL 接口。你需要存储 mfaToken 以备后续使用。
调用 SDK 的处理方式:
try {
window.user = await window.authing.login({ email, password });
alert(`登录成功,信息:${JSON.stringify(window.user)}`);
} catch (err) {
if (err.message.code === 1635) {
console.log(err.message.data.email);
console.log(err.message.data.nickname);
console.log(err.message.data.username);
console.log(err.message.data.avatar);
console.log(err.message.data.mfaToken);
window.mfaToken = err.message.data.mfaToken;
}
alert(err.message.message);
}
直接调用 GraphQL 接口的返回信息:
{
"errors": [
{
"message": {
"code": 1635,
"message": "请输入二次认证安全码",
"data": {
"mfaToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVzZXJQb29sSWQiOiI1Y2NlNGFhODNlZDlmOTdiNGRmZDk1ZjAiLCJ1c2VySWQiOiI1ZjhlZTYyY2FmYzJmZmFkMzY0MzQ1YjciLCJhcm4iOiJhcm46Y246YXV0aGluZzo1Y2NlNGFhODNlZDlmOTdiNGRmZDk1ZjA6dXNlcjo1ZjhlZTYyY2FmYzJmZmFkMzY0MzQ1YjciLCJzdGFnZSI6MX0sImlhdCI6MTYwMzIwNjcwOCwiZXhwIjoxNjAzMjA3MDY4fQ.PR7LXqpyH--6sF4eAcOcK1yZBi14lRv_lr9qUtbTQM4",
"nickname": null,
"email": "q3@123.com",
"username": null,
"avatar": "https://usercontents.authing.cn/authing-avatar.png"
}
},
"locations": [{ "line": 2, "column": 9 }],
"path": ["login"],
"extensions": { "code": "INTERNAL_SERVER_ERROR" }
}
],
"data": { "login": null }
}
# 登录验证 MFA 口令
POST
https://core.authing.cn/api/v2/mfa/totp/verify
用于登录时一次认证成功后,检验二次认证口令是否正确。
对于开启二次认证的用户,第一次认证成功后会返回一个 mfaToken,需要携带 mfaToken 请求本接口完成二次认证
# 使用恢复代码
POST
https://core.authing.cn/api/v2/mfa/totp/recovery
用于用户登录一次认证成功后,丢失 MFA 口令时恢复账号访问。
如果用户开启了二次认证而丢失了 MFA 口令,需要使用恢复代码来恢复账号的访问。使用恢复代码等效于使用 MFA 口令,使用过后会为用户生成新的恢复代码。用户可以在登录后解绑 MFA 并重新绑定新的 MFA。
# MFA Demo
Github: mfa-demo (opens new window)
# 运行方法
双击打开 index.html 文件。
或在项目目录启动一个 http 服务器。
$ npm install -g http-server
$ http-server
然后访问 127.0.0.1:8080。