可以使用 Auth0 JWT 令牌向 Django 后端发送 POST 请求吗?

Posted

技术标签:

【中文标题】可以使用 Auth0 JWT 令牌向 Django 后端发送 POST 请求吗?【英文标题】:Can Auth0 JWT Tokens Be Used to Send POST Requests to Django Backend? 【发布时间】: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 才可能适合我的场景的唯一解决方案? 【参考方案1】:

刚刚设法解决了我的问题,只是想为那些被这个潜在问题困扰的人重定向一个潜在的解决方案。

长话短说,您可以使用 JWT 令牌通过 Django 后端发送 POST 请求,只是网上关于如何操作的文档几乎为零。我已经在谷歌上搜索了 7 天的相同文件,但没有找到任何文件。

尽管如此,我还是在这个链接中写下了我的解决方案,希望对遭受“拉毛效应”的人有所帮助:https://***.com/a/56895558/1140206

祝你好运!

【讨论】:

以上是关于可以使用 Auth0 JWT 令牌向 Django 后端发送 POST 请求吗?的主要内容,如果未能解决你的问题,请参考以下文章

Auth0 Laravel 获取 JWT 令牌

PHP中的Auth0 JWT令牌验证

如何从 auth0 中的访问令牌中获取 jwt 令牌

Auth0 java-jwt 库无法验证有效令牌

Django + Auth0 JWT 身份验证拒绝解码

如何执行 Auth0 JWT 令牌用户基于角色的授权