授权承载基本

时间:2018-04-24 06:17:39

标签: express axios

我有后端服务器"受保护"使用基本的http auth和REST API端点的公开数量。某些端点受到在登录过程中获取的JWT令牌的保护。 JWT令牌从Authorization: Bearer TOKEN标头中的客户端发送。

问题:是否可以同时拥有两种身份验证类型 - http auth和JWT?只在不同的标题中传递Bearer

1 个答案:

答案 0 :(得分:2)

这实际上取决于你的后端。您需要稍微修改一下。

使用passport-jwt

的解决方案

您可以使用其他名称指定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();

} );