我正在创建一个网站,用户可以在登录后加载另一个我正在开发的网站。授权后,用户将获得一个JWT令牌,该令牌将在每个请求的头部中发送,就像任何具有JWT令牌授权的When应用程序一样。
问题是我只想把敏感的页面内容发送给授权的用户。后台的授权已经可以处理正常的API调用了,但是当遇到"src“标签时,我不能拦截系统本身发出的调用。
HTML文件是这样请求的(为了方便起见,这里添加了头标记,而不是在单独的拦截器文件中):
redirect(response) {
console.log(response);
if(response.isAdmin) {
const headers = new HttpHeaders().set("Authorization", "Bearer " + response.token);
this.http.get("AdminPage", {headers: headers, responseType: "text"}).subscribe(response => {
// response is the HTML file
const win = window.open("", "_self");
win.document.documentElement.innerHTML = response;
});
} else {
// The users page will be loaded here just like above, with another path
// TODO
}
}HTML文件被加载,但当它遇到其中的"src“标记时,它将从服务器请求文件,但服务器不会响应,因为请求中没有JWT令牌。
有没有办法也能截获这个电话?或者,有没有更好的方法来实现这一点?
(我不知道这是否相关,但我的后端是用ASPNET.Core编写的)
发布于 2019-12-31 02:36:23
您可以将其作为Get参数,如下所示
<img src="http://img.com?token=<token>"/>或者你可以像@matt suggested那样使用cookie
发布于 2019-12-31 16:46:14
事实证明这真的很容易。您可以在后端使用控制器中的以下代码将JWT令牌存储在cookie中(在ASPNET.Core中):
CookieOptions cookieOptions = new CookieOptions();
cookieOptions.HttpOnly = true;
Response.Cookies.Append("auth_token", user.Token, cookieOptions);您可以在授权中间件中检索令牌,如下所示:
string token = context.Request.Cookies["auth_token"];由于XSS攻击,它也比将其存储在本地/会话存储中更安全。
我在这里读到过:
https://www.c-sharpcorner.com/article/asp-net-core-working-with-cookie/
还有这里:
https://blog.logrocket.com/jwt-authentication-best-practices/
使用cookie,您甚至不需要在前端拦截http请求,因为cookie会随每个请求自动发送。
致谢@Matt Davis
https://stackoverflow.com/questions/59534969
复制相似问题