hapi-auth-bearer-token仅用于API身份验证?

时间:2016-03-22 13:29:39

标签: authentication hapijs bearer-token

我一直在阅读持票人令牌模块上的文档以获取hapi,并想知道它是否仅适用于API身份验证或通用Web应用程序身份验证。

文档中有一些不清楚的事情。

1)令牌从哪里来? IOW,什么机制创建令牌?

2)用户首先登录的是什么方式?

由于

1 个答案:

答案 0 :(得分:1)

  

我一直在阅读不记名令牌模块上的文档以了解hapi,并想知道它是否仅适用于API身份验证或通用Web应用程序身份验证。

承载者身份验证用于授权API请求。

  

1)令牌源自何处? IOW,什么机制创建令牌?

您需要自行生成和验证令牌。

要生成,存储和验证令牌,可以使用uuidbcryptjs(将令牌发送给用户,并将散列的令牌存储在数据库中以供以后验证)。

以下示例在TypeScript中。

import uuid from 'uuid';
import bcrypt from 'bcryptjs';

export interface GeneratedToken {
  token: string;
  hashedToken: string;
}

const generateToken = async function(): Promise<GeneratedToken> {
  return new Promise<GeneratedToken>((resolve, reject) => {
    let token = uuid.v4().replace(/-/g, '');
    bcrypt.genSalt(10, function(error, salt) {
      if (error) {
        reject(error);
      } else {
        bcrypt.hash(token, salt, function(error, hashedToken) {
          if (error) {
            reject(error);
          } else {
            resolve({
              token: token,
              hashedToken: hashedToken
            });
          }
        });
      }
    });
  });
};

const validateToken = function(token: string, hashedToken: string): Promise<boolean> {
  return new Promise<boolean>((resolve, reject) => {
    bcrypt.compare(token, hashedToken, function(error, result) {
      if (error) {
        reject(error);
      } else {
        resolve(result);
      }
    });
  });
};
  

2)用户首先通过什么方式登录?

您需要使用另一种身份验证方案,就像将哈希密码存储在数据库中并将其与发送到API路由的数据进行比较一样简单。用于令牌的相同哈希方案也可以很好地工作。