当角度应用已经使用JWT进行AJAX请求时,最简单的方法来保护浏览器请求?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当角度应用已经使用JWT进行AJAX请求时,最简单的方法来保护浏览器请求?相关的知识,希望对你有一定的参考价值。

我有一个支持ASP.NET Core的Angular应用程序。

它使用Auth0作为身份服务器,它向角度应用程序发出访问令牌(JWT)。

后端在Web API控制器上使用Microsoft.AspNetCore.Authentication.JwtBearerAuthorize属性。

现在我想添加一些控制器动作来服务器生成动态生成的PDF文件。只有经过身份验证的用户才能访问这些用户,并且他们的访问令牌中有相应的声明。

这些新端点将通过浏览器链接而不是AJAX请求进行访问,因此我无法在标头中发送承载令牌(据我所知)。

鉴于我现有的auth基础设施,为这些新控制器增加安全性的最简单方法是什么?

将通过在角度组件模板中生成的html锚元素(例如<a href="path/to/doc.pdf" target="_blank">PDF</a>)来访问PDF。

我可以添加承载令牌作为查询参数。我读到的这种方法的主要缺点是令牌可以在服务器日志等中获得。

也许有一种替代方法可以通过AJAX请求下载PDF(在这种情况下,标头中现有的承载令牌的使用将适用),但我不确定这样做的好方法。

答案

将JWT添加到href链接没有任何问题。 JWT是加密的,在这种情况下,他们无法查看或修改它或签名,在这种情况下,不应该有任何识别信息,但用户仍然无法修改它。我建议抽象出doc的名称,使用数字/ guid而不是实际文件(你总是可以在响应中指定正确的名称)。所以你有;

<a href="https://yoursite.com/api/documents/1234-5435-1234.pdf?jwt=..." target="_blank">PDF</a>

注意:这假设您正在加密JWT或对其进行签名 - 这是此方案中的要求。我不会留下明文。有效地签名或加密可以消除对auth的需要,前提是使用了足够大的(2048+)公钥/私钥对,但是如果用户登录则其身份验证cookie仍然适用并且无论如何都会被发送。

以上是关于当角度应用已经使用JWT进行AJAX请求时,最简单的方法来保护浏览器请求?的主要内容,如果未能解决你的问题,请参考以下文章

使用angular 7时无法使用passport-jwt在快递Js中进行授权

在进行 ajax 调用时在 HTTP 标头中包含 JWT

如何在前端的 Javascript Ajax API 调用中隐藏我的 JWT 令牌?

Spring Security Jwt 令牌在请求表单角度时允许所有选项方法

如何在角度 http 请求中实现 client_credentials 授权类型?

每个请求的 JWT 令牌验证?