我一直在阅读持票人令牌模块上的文档以获取hapi,并想知道它是否仅适用于API身份验证或通用Web应用程序身份验证。
文档中有一些不清楚的事情。
1)令牌从哪里来? IOW,什么机制创建令牌?
2)用户首先登录的是什么方式?
由于
答案 0 :(得分:1)
我一直在阅读不记名令牌模块上的文档以了解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路由的数据进行比较一样简单。用于令牌的相同哈希方案也可以很好地工作。