【发布时间】:2019-11-14 04:53:42
【问题描述】:
在过去的 5-6 天里,我找不到任何有效文档,说明如何解决将 POST 请求发送到基于 Django 的 JWT (Auth0) 安全 API 后端的问题。
我希望有人可以帮助验证是否可以发送 POST 请求或者我可能会考虑哪些替代方案。
我当前的问题源于通过客户端凭据流 M2M 方法使用 Auth0 JWT 令牌的一个假定的最终重大错误。虽然我可能理解我使用的是非常独特的设置:
- 反应前端
- Django 后端
- 没有用于访问安全 API 访问的用户登录
我想这让我开始质疑是否简单地说,“我什至可以将 POST 请求发送到 Auth0 JWT 令牌安全后端吗?”。如果可能的话,希望有人可以将我重定向到一个潜在的解决方案,否则,至少我知道我真的需要完全寻找其他东西。
我只在 React 前端看到的潜在解决方案是实际构建一个:
- Express.js 后端
- 启用用户帐户登录访问
这并不理想,因为这两个选项都不是预期的用例,并且需要我更改大量代码,尤其是重建整个后端。我本来打算在 2-3 周前发布,但显然现在,这是我面临的最后一个安全障碍。
希望某个好心人可以帮助我找到一个潜在的解决方案,让我了解如何将带有 JWT 令牌验证的 POST 请求发送到 Django 后端?
我当前使用的代码如下,遗憾的是,GET 选项有效,但这个 POST 请求选项似乎不起作用:
let getBackendConfig = {
headers: {
"Content-Type": "application/json",
Authorization: process.env.REACT_APP_JWT_AUTH0_HEADER + " " + auth0Token,
},
};
async function submitLocationViaPOST( dataToPOST ) {
setIsLocationUploaded("process");
try {
Promise.all([
await axios
.post(urlSubmitLocationPOSTAPI, dataToPOST, getBackendConfig)
.then(response => {
console.log("???? urlSubmitLocationPOSTAPI Reply Data: ", response);
if (response.status === 201) {
// EXECUTE ONLY IF RESPONSE IS "201" --- MEANING ENTRY CREATED SUCCESSFULLY
setIsLocationUploaded("finish");
}
})
]);
}
catch (err) {
setIsLocationUploaded("error");
console.log("???? urlSubmitLocationPOSTAPI Error: " + err);
}
}
目前,任何发送到 JWT (Auth0) 安全 API 后端的 GET 请求都有效。但是,当我尝试发送 POST 请求时,一切都失败了。
鉴于它是一个无用户帐户登录过程,以及使用 Django REST Framework 构建的 Django 后端,除了标准 500 错误之外没有太多错误消息,当我禁用它时会消失JWT 身份验证过程,这反过来会破坏构建此安全措施的最初目的。
希望对此有更深入了解的人可以帮助我解决这个问题。提前非常感谢!
【问题讨论】:
-
客户端凭据授予不是验证 SPA 和 API 的安全方式。如果 SPA 访问信息不需要用户身份验证,您不妨将 API 向公众开放。任何人都可以检查您的 React 应用并获取您的客户端 ID 和密码,然后使用它来获取您的 API 的访问令牌。
-
嗨@DanWoda,那么我的问题是M2M 客户端凭证结构应该如何工作?鉴于我的网站是一个非常基本的网站,如果包含登录系统可能会使它过于复杂,因为它没有那么多功能需要这样的功能。因此,我假设我的系统很像系统到系统的通信,就像 M2M 一样,尽管它是前端到后端的关系。那么 SPA + API 是不是因为我在前端使用 React 而在后端使用 Django 才可能适合我的场景的唯一解决方案?
标签: django post jwt token auth0