【发布时间】:2020-05-05 05:25:06
【问题描述】:
我有两个用 .netcore 编写的 Web 应用程序,App 1 提供 html 内容,App 2 是服务于 Javascript 请求的 API,两者都在同一个解决方案中,但每个都有不同的端口。我的场景是浏览器从App 1 返回包含注册表单的网站,并且javascript 访问App 2 API 上的注册功能。
为了防止任何其他网站访问该 API,我启用了 CORS 并添加了 App 1 域作为唯一允许访问 App 2 的 API 的域,它运行良好,但任何桌面都可以模仿这个相同的请求标头并访问 API,我用邮递员测试并访问了 API。
所以我添加了 Authorization 标头,以便所有 API 函数都需要授权 JWT bearer 令牌被访问。
问题是如何阻止桌面应用程序或其他非浏览器应用程序访问它。原因如下:
1- 如果我将访问令牌放入来自 App 1 的响应中,以便 javascript 可以使用它来访问 App 2 ,任何其他应用程序都可以轻松获取它并将其复制粘贴到他们的应用程序和 API 将被访问。
2- 如果我不在App 1 的响应中对令牌进行硬编码,而是让 javascript 访问生成令牌的路由,那么任何应用程序都可以这样做,因为它们可以模仿相同的请求标头浏览器。那么 CORS 将毫无用处。
那我该怎么办?
【问题讨论】:
-
您无能为力。如果浏览器可以发送东西,那么任何其他应用程序也可以。
-
@Barmar 那么我怎样才能保护我的应用程序以获取它的
JWT而没有其他应用程序占用它。只是第一次发行? -
一般来说,需要秘密令牌的 API 不能直接从浏览器调用,而是从服务器代码调用。
-
条纹就是一个例子。它们为您提供了两个 API 密钥,一个“可发布”密钥和一个“秘密”密钥。可发布密钥仅在浏览器应用程序将信用卡转换为令牌时使用。密钥在后端用于向信用卡收费。
-
在调用移动资金的API函数时不能使用可发布密钥。
标签: javascript asp.net-core cors jwt