例如,我在标头中跟随Bearer JWT,提取令牌本身的一种优雅方法是什么?以后基本上什么都没有Bearer。由于这可以采用其他格式,因此我不希望它始终以开头Bearer。我正在使用node-jsonwebtoken,但没有找到这种方法。
Authorization: Bearer eyJhbGciOiJIUzI1NiIXVCJ9...TJVA95OrM7E20RMHrHDcEfxjoYZgeFONFh7HgQ
ped*_*ofb 16
出于安全原因,您应确保Authorization标头具有预期的内容。Bearer如果期望的话,您根本不应该接受不以该开头的标头(“ Bearer”是RFC中的建议,不是强制性的)。
if (authHeader.startsWith("Bearer ")){
token = authHeader.substring(7, authHeader.length);
} else {
//Error
}
Run Code Online (Sandbox Code Playgroud)
Sin*_*dro 11
我编写了一个函数,用于从请求标头或查询中提取令牌。我把它贴在这里。希望它可以帮助某人。
function extractToken (req) {
if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
return req.headers.authorization.split(' ')[1];
} else if (req.query && req.query.token) {
return req.query.token;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
小智 9
对于 typescript、nodejs,导入jwt-decode。
import jwtDecode from 'jwt-decode';
const authHeader = String(req.headers['authorization'] || '');
if (authHeader.startsWith('Bearer ')) {
const token = authHeader.substring(7, authHeader.length);
const payload = jwtDecode(token) as JwtPayload;
}
Run Code Online (Sandbox Code Playgroud)
JwtPayload是一个接口或类。
export interface JwtPayload {
id: string;
username: string;
email: string;
role: string;
expire: number;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方式分割空间
TokenArray = jwttoken.split(" ");
Run Code Online (Sandbox Code Playgroud)
它将以数组形式存储,其中第二个索引(第一个索引为0时为1)TokenArray[1] 将是令牌并使用
Jwt.decode(TokenArray[1])
Run Code Online (Sandbox Code Playgroud)
解码令牌JWT是一种令牌标准,您可以在许多标准中使用它,其中一种最常用的情况是用于授权,它也可以通过多种方式完成,但是首选的标准方式是在承载授权标头中发送它您可以refresh_token改用,bearer token但必须将令牌存储在某个地方,这将以某种方式降低术语stateless令牌的效率。因此,承载方式完全是无状态的,是首选方法
小智 6
返回令牌的简单实用函数
function getToken(req) {
if (
req.headers.authorization &&
req.headers.authorization.split(" ")[0] === "Bearer"
) {
return req.headers.authorization.split(" ")[1];
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
然后可以将令牌传递给其他方法。例如,验证签名。
const token = getToken(req);
if (!token) {
throw new Error("Authorization token is required");
}
jwt.verify(token, secret, function (err, decoded) {
if (err) {
throw new Error("Error : " + err);
}
console.log(decoded);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11400 次 |
| 最近记录: |