我有后端服务器"受保护"使用基本的http auth和REST API端点的公开数量。某些端点受到在登录过程中获取的JWT令牌的保护。 JWT令牌从Authorization: Bearer TOKEN
标头中的客户端发送。
问题:是否可以同时拥有两种身份验证类型 - http auth和JWT?只在不同的标题中传递Bearer
?
答案 0 :(得分:2)
这实际上取决于你的后端。您需要稍微修改一下。
您可以使用其他名称指定Bearer
授权标头,例如X-Authorization
,然后在某处(让我们假设您使用passport)配置为JWT将是通过另一个请求标题
const jwt = ExtractJwt.fromHeader( "X-Authorization" );
然后两个标题不会发生碰撞,您将能够通过JWT和/或Basic Auth对用户进行身份验证。
即使您没有使用护照进行JWT授权,基本想法仍然有效。
或者您可以简单地使用中间件来提取授权。与express-bearer-token
的工作方式类似。
app.use( function( req, res, next ) {
var headerName = "X-Authorization";
if (req.headers && req.headers[headerName]) {
var parts = req.headers[headerName].split(' ');
if (parts.length === 2 && parts[0] === "Bearer") {
req["token"] = parts[1];
}
}
next();
} );