如何将标头身份验证承载中的令牌发送到浏览器

Posted

技术标签:

【中文标题】如何将标头身份验证承载中的令牌发送到浏览器【英文标题】:how can I send token in header authentication Bearer to Browser 【发布时间】:2019-02-19 01:42:44 【问题描述】:

这是我在辅助登录路由器中的代码 所以我在确认登录后尝试将cookie设置为浏览器

exports.signin = (req,res) => 
        db.User.findOne(email:req.body.email).then(user => 
            user.comparePassword(req.body.password,function(err,isMatch)
                if(isMatch)
                    let token = jwt.sign(userId: user.id,process.env.SECRET_KEY, expiresIn: 60*5 );
                    res.setHeader() //here I wanna send header Bearer to the browser 
                 else 
                    res.status(400).json(message:"Incorrect Password!");
                
            )
        )
        .catch(err => 
            return res.status(404).send('No user found.');  
        )**strong text**
    

【问题讨论】:

【参考方案1】:

在 Node.js res.setHeader() 和 Express js 中 res.header() 是 res.set() 方法的别名。

您可以通过以下方式使用:

res.setHeader('Authorization', 'Bearer '+ token); 
res.header('Authorization', 'Bearer '+ token);

但我建议你阅读 jwt 示例(angularjs & node):https://code.tutsplus.com/tutorials/token-based-authentication-with-angularjs-nodejs--cms-22543

【讨论】:

【参考方案2】:

Authorization header是一个client header,不能在服务端设置(服务端不需要授权)。您需要在 JSON 响应中发送它,然后在客户端进行处理。

您的服务器发送带有令牌的 JSON 响应。 您的客户端设置 Authorization 标头并将其发送到任何需要授权的路由

javascript 客户端示例:

var myHeaders =  new Headers()

/**you need to get the token and put it in myToken var.
   Where to store the token is the real question, you need
   to take care about the storage you choose beacause of
   the security risks*/

myHeaders.append('Content-Type','application/json; charset=utf-8');
myHeaders.append('Authorization', 'Bearer ' + myToken);

fetch( '/myurl', 
    credentials: 'include',
    headers: myHeaders,
    method: 'GET'
).then( res => 

    return res.json();

).then( res => 

    /**your stuff*/
    
);

然后在您的服务器中检查标头,您将看到 Bearer

【讨论】:

我认为这个答案是有效的,但它缺少“如何”。在 expressjs 内部,您可以 res.send("your token here") 好吧,但是一旦发送,客户端会将其作为 json 文件接收(特别是如果您想发送其他用户信息,例如姓名或电子邮件)。好的,现在,在客户端,客户端如何将令牌设置为标头?因为例如,要访问仪表板,用户将需要身份验证,令牌必须在标题中。怎么样?

以上是关于如何将标头身份验证承载中的令牌发送到浏览器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用AngularJS将身份验证承载令牌存储在浏览器cookie中

如何在 Ionic 4 中发送带有标头的身份验证令牌?

如何正确地将身份验证令牌放在 GET 请求的标头中

使用 Moya 刷新身份验证令牌

React.js JWT Socket.io 身份验证

如何将承载令牌添加到 HTTP 请求的标头?