将标记添加到src标记请求Angular 8

时间:2019-12-30 18:01:40

标签: javascript html angular asp.net-core

我正在创建一个网站,用户登录后可以在该网站上加载我正在开发的另一个网站。获得授权后,用户将获得JWT令牌,并且该令牌随每个请求一起发送到标头中,就像其他任何带有JWT令牌授权。

问题是我只想将敏感页面内容发送给授权的用户。后端中的授权已经可以使用普通的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编写的)

2 个答案:

答案 0 :(得分:0)

您可以像这样将其作为Get参数

<img src="http://img.com?token=<token>"/>

或者您可以使用建议的@matt之类的Cookie

答案 1 :(得分:0)

事实证明这确实很容易。您可以使用后端控制器(在ASPNET.Core中)中的以下代码将JWT令牌存储在cookie中:

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的积分