【发布时间】:2019-09-19 09:03:52
【问题描述】:
我一直在阅读有关 hapi 的不记名令牌模块的文档,想知道它是否仅适用于 API 身份验证或也适用于通用 Web 应用程序身份验证。
文档中有一些内容不清楚。
1) 令牌从何而来? IOW,什么机制创建令牌?
2) 用户首先通过什么方式登录?
谢谢
【问题讨论】:
标签: authentication hapijs bearer-token
我一直在阅读有关 hapi 的不记名令牌模块的文档,想知道它是否仅适用于 API 身份验证或也适用于通用 Web 应用程序身份验证。
文档中有一些内容不清楚。
1) 令牌从何而来? IOW,什么机制创建令牌?
2) 用户首先通过什么方式登录?
谢谢
【问题讨论】:
标签: authentication hapijs bearer-token
我一直在阅读有关 hapi 的不记名令牌模块的文档,想知道它是否仅适用于 API 身份验证或也适用于通用 Web 应用程序身份验证。
承载认证用于授权 API 请求。
1) 令牌从何而来? IOW,什么机制创建令牌?
您需要自己生成和验证令牌。
要生成、存储和验证令牌,您可以使用uuid 和bcryptjs(令牌发送给用户,哈希令牌保存在数据库中以供以后验证)。
以下示例使用 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 路由的数据进行比较一样简单。用于令牌的相同哈希方案也可以正常工作。
【讨论】: