首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向src标签请求添加令牌Angular 8

向src标签请求添加令牌Angular 8
EN

Stack Overflow用户
提问于 2019-12-31 02:01:40
回答 2查看 475关注 0票数 1

我正在创建一个网站,用户可以在登录后加载另一个我正在开发的网站。授权后,用户将获得一个JWT令牌,该令牌将在每个请求的头部中发送,就像任何具有JWT令牌授权的When应用程序一样。

问题是我只想把敏感的页面内容发送给授权的用户。后台的授权已经可以处理正常的API调用了,但是当遇到"src“标签时,我不能拦截系统本身发出的调用。

HTML文件是这样请求的(为了方便起见,这里添加了头标记,而不是在单独的拦截器文件中):

代码语言:javascript
复制
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编写的)

EN

回答 2

Stack Overflow用户

发布于 2019-12-31 02:36:23

您可以将其作为Get参数,如下所示

代码语言:javascript
复制
<img src="http://img.com?token=<token>"/>

或者你可以像@matt suggested那样使用cookie

票数 0
EN

Stack Overflow用户

发布于 2019-12-31 16:46:14

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

代码语言:javascript
复制
CookieOptions cookieOptions = new CookieOptions();
cookieOptions.HttpOnly = true;
Response.Cookies.Append("auth_token", user.Token, cookieOptions);

您可以在授权中间件中检索令牌,如下所示:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59534969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档