【问题标题】:CORS vs JWT what is differenceCORS 与 JWT 有什么区别
【发布时间】:2020-11-12 02:02:39
【问题描述】:

我在 heroku 上开发和部署了 django rest api。然后我试图在 vue cli 中获取 api,但它不起作用。它说 CORS 错误。这次我的脑海里有一些问题

  • 我应该在后端使用 cors 库或 allor-origin 在前端启用 cors??
  • 我可以使用 JWT 代替 CORS
  • 如果在后端启用 cors 应该面临什么问题??

【问题讨论】:

标签: django postgresql vue.js django-rest-framework


【解决方案1】:

CORS 和 JWT 完全不同。

JWT 代表 JSON Web Tokens,是 RFC 7519 定义的基于令牌的身份验证。因此,JWT 令牌用于允许访问(登录)Web 资源。您还可以向令牌添加信息(如用户名),如果未加密,则可以公开读取。但是 JWT 有一种签名方法,因此可以验证令牌是否有效。可以使用不同的加密算法,例如RSA。您可以选择非对称签名(例如 RSA)或对称签名(例如 HS256)。

您可以在jwt.io找到有关 JWT 的信息

CORS 代表 Cross-Origin Resource Sharing,它定义了如何允许浏览器跨资源请求请求,或者换句话说:对其他域的 HTTP 访问。

在我看来,Mozilla 很好地覆盖了 CORS: https://developer.mozilla.org/de/docs/Web/HTTP/CORS

针对您的具体问题: 您正在尝试访问不属于同一域的资源(http 链接),因此出于安全原因,您的浏览器不允许打开它。

allow-origin 是一个 HTTP 标头,在您使用的网络框架中设置。 由于 Django 没有开箱即用的 CORS,因此您需要添加一些内容,例如 https://github.com/ottoyiu/django-cors-headers

安装后,您可以启用 CORS

CORS_ORIGIN_ALLOW_ALL = True

并启用您要调用的跨域请求:

CORS_ORIGIN_WHITELIST = (
    'host1.example.com',
    'host2.example.com',
    'host3.foobar.info'
)

【讨论】:

    【解决方案2】:

    两者都不一样

    CORS(Cross-Origin Resource Sharing) 实现了客户端浏览器和具有不同来源的服务器之间的资源共享,这允许停止或允许从客户端到服务器的请求。

    JWT 是一种为您的应用程序添加安全性的方法,您可以使用 JWT 来识别用户,这样,服务器只会向拥有有效 JWT 的用户发送响应,请阅读更多信息here

    • 答案1:必须在后端启用CORS,在前端你可以使用axios来执行http请求,它会添加所需的headers

    • 答案 2:如果不启用 CORS,来自客户端(世界各地访问您的网站/应用程序的人)的请求将被拒绝,因此您的应用程序只能在主机上使用,无论如何,JWT 不会添加任何内容在这种情况下,JWT 用于识别有效用户,即有权访问服务器资源的用户。 启用 CORS 并在没有 JWT 的情况下接受请求,意味着您的应用程序/网站不使用身份验证系统,也不需要验证用户身份。还有其他识别用户的方法,JWT 只是其中之一。

    • 答案 3:为了避免恶意请求,必须添加一个安全层,这样只有允许的用户才能访问服务器资源。

    【讨论】:

    • 感谢您给予您宝贵的价值,我完全理解您所说的
    猜你喜欢
    • 2017-03-15
    • 2015-10-10
    • 2015-04-09
    • 2018-04-10
    • 2018-12-31
    • 2021-03-30
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    相关资源
    最近更新 更多