如何在我的应用程序(nodeJS)中集成 google 身份验证器?

How do I integrate google authenticator in my app(nodeJS)?

我看到一些 Web 应用程序使用 Google 身份验证器(即 6 位数字代码生成器)作为二级安全措施(例如:Binance、Kraken 等)。我正在 google 云平台上制作应用程序,需要它才能使用 Authenticator。

我该怎么做?

N/A

这必须在 nodeJS 服务器上实现

good Example google-authenticator-node-js-web-app

> mkdir back-end
> cd back-end
> npm init -y
> npm install --save express body-parser cors qrcode speakeasy

现在,我们已经创建了一个目录“back-end”,并通过安装以下依赖项将其初始化为 Node.js 项目:

express — 这是一个用于创建 API 服务的最小且灵活的 Web 框架。 body-parser — 为了解析HTTP方法的body数据,正在使用这个包。

cors —— 此包用于使客户端 Web 应用程序能够与 API 服务通信并避免 cross-origin 问题.

qrcode — 在此应用程序中,我们将生成 QR-code 作为 base64 图像数据,因此我们需要 qrcode 包。

speakeasy 这个包使我们的应用程序能够提供 Google 身份验证器使用的密钥和 T-OTP 算法也可用于验证所提供的授权码。

我们现在将创建几个API服务,app.js作为执行的主要文件。为了学习过程的简单,应用的脚手架遵循关注点分离。

一种可能是使用 Rapidapi (endpoint):

  1. 您的用户下载 Google 身份验证器应用 https://apps.apple.com/us/app/google-authenticator/id388497605 or https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&gl=US

  2. 您代表您的用户生成一个“秘密”代码:

    const request = require('request');
    
    const options = {
        method: 'GET',
        url: 'https://google-authenticator.p.rapidapi.com/new/',
        headers: {
            'x-rapidapi-host': 'google-authenticator.p.rapidapi.com',
            'x-rapidapi-key': 'rapidapi-guid',
            u.seQueryString: true
        }    
    };
    
    request(...);
    

    服务器将 return 您的密码(例如“GXPTBCTI4DX4UFJB”),保留密码,因为您将在第 3 步和第 4 步需要它。

  3. 您通过以下方式为您的用户生成二维码:

    const options = {
        method: 'GET',
        url: 'https://google-authenticator.p.rapidapi.com/enroll/',
        qs: {secret: 'GXPTBCTI4DX4UFJB', account: 'JohnDoe', issuer: 'AcmeCorp'},
        headers: {
        'x-rapidapi-host': 'google-authenticator.p.rapidapi.com',
        'x-rapidapi-key': 'rapidapi-guid',
        useQueryString: true
        }
    };
    
    request(...);
    

    用户使用 Google 身份验证器应用程序扫描二维码,现在会生成临时代码。

  4. 现在您可以通过以下方式验证代码:

    const options = {
    method: 'GET',
    url: 'https://google-authenticator.p.rapidapi.com/validate/',
    qs: {code: '266677', secret: 'GXPTBCTI4DX4UFJB'},
    headers: {
        'x-rapidapi-host': 'google-authenticator.p.rapidapi.com',
        'x-rapidapi-key': 'rapidapi-guid',
        useQueryString: true
        }
    };
    
    request(...)
    

查看完整教程here