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

问题描述 投票:0回答:1

我有一个支持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(在这种情况下,标头中现有的承载令牌的使用将适用),但我不确定这样做的好方法。

c# angular asp.net-core authorization auth0
1个回答
0
投票

将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仍然适用并且无论如何都会被发送。

© www.soinside.com 2019 - 2024. All rights reserved.