Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对于Django Rest,应该使用什么来进行身份验证?

对于Django Rest,应该使用什么来进行身份验证?
EN

Security用户
提问于 2018-04-29 07:16:44
回答 2查看 5.2K关注 0票数 6

我刚刚读到了关于为什么JWT很糟糕的文章。我现在不确定我应该使用什么来进行身份验证。

上下文:我编写的API主要用于移动应用程序(iOS和Android)。在未来,它也将被访问通过一个反应前端。

在过去,我只是在令牌身份验证中使用DRF的构建。然后,手机只需将此令牌存储在相应的应用程序中。

现在,我被告知,这是不安全的,我应该使用JWT。在研究JWT的时候,我发现了上面的文章,其中详细阐述了为什么JWT的suck和基本会话身份验证更好。但据我所知,当作为API使用时,我不能使用DRF进行会话身份验证,是吗?

所以我的问题是?我应该使用哪些DRF工具来进行身份验证,这样它才是安全的?

EN

回答 2

Security用户

回答已采纳

发布于 2018-04-30 13:32:29

我是这篇文章的作者,也是我给出的关于为什么JWT糟糕且愚蠢的技术演讲( @joepie91 91已经雄辩地写了比我以往任何时候都更好的文章:http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/)。

考虑到您的应用程序需求(移动应用程序+只与后端API对话的JS前端应用程序),我建议您使用OpenID连接授权代码流(对于您的移动应用程序使用w/ PKCE )。

具体来说,对于您的移动应用程序,我建议使用非常棒的AppAuth库:https://appauth.io/ (它为iOS +Android都提供了很好的库)。

现在,你可能想知道为什么我会建议使用OpenID连接(也就是JWT)来做一些事情,当我如此公开地召集人们反对使用JWT的时候:我会告诉你--对于大多数事情来说,这并不重要。

事情是这样的:是的,在构建安全的应用程序时,JWT的使用非常糟糕。它们很复杂,大多数库目前还没有完整的规范,使用JWT加密等更高级的特性几乎肯定会给您带来严重的麻烦和服务之间的兼容性问题。

此外,JWT之所以变得流行于身份验证,是因为它们经常用于缓存身份验证和授权数据--在安全世界中,整个实践是一个大不可以的。

缓存敏感数据(如身份验证和授权数据)是您为安全所能做的最糟糕的事情:您信任过时的信息。目前建立在JWTs之上的所有auth系统都受到这种天真的影响。

一旦您尝试通过使用JWT来“加快”您的站点/API的速度,您就已经犯了安全错误,现在正处于危险之中。

此外,一旦人们开始使用JWT并意识到他们处于危险之中,他们就会尝试重新集中所有东西(正如另一位评论者所建议的),并开始使用吊销列表,以便在发生坏事时可以撤销令牌。这导致了与传统会话管理相同的速度惩罚,但由于JWT比会话cookie“重”,而且更脆弱,速度惩罚更大。

对不起,我的建议是:

  • 如果你想要真正的安全,你必须使用服务器端会话。在您的示例中,这将需要支持来自API后端的会话cookie,以便当您的react对您的API进行身份验证时,该API设置一个安全cookie,每当它与API服务进行身份验证时,该应用程序将自动使用该cookie。您还需要从您的移动应用程序中使用基于cookie的API (我不熟悉构建本地移动应用程序,因此不能对此组件发表评论)。
  • 如果你想要简单、安全程度和其他主要的web应用一样,可以使用OIDC和开箱即用的开源解决方案。这是目前最简单的方法,虽然它并不完美,但如果它解决了您的问题,那么它可能不是什么大问题。

如果您正在构建敏感内容,请尽可能使用服务器端会话cookie。否则呢?不要为细节操心,要随心所欲。

票数 6
EN

Security用户

发布于 2018-04-29 11:37:59

海事组织,你有两个很好的选择:

  1. 使用随机字符串,该字符串将对应于存储在数据库中的会话。如果可能的话,这是最好的选择。虽然这些会议不应该是长期的。如果需要长期登录,可以使用JWT令牌进行重新身份验证。
  2. 使用用对称密钥(HMAC)签名的JWT。这是更快,但仍然安全。然而,这个选项对带宽的要求仍然要高得多,而且通常比随机字符串慢得多。
票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/184855

复制
相关文章
like和regexp差别
image.png image.png image.png like匹配整个列,如果被匹配的文本在列值中出现,like将不会找到它,相应的行也不会返回(除非使用通配符)。 而regexp在列值内进行匹配,如果被匹配的文本在列值中出现,regexp会找到它,并且返回数据,这是一个非常重要的差别。 like匹配整个串,而regexp匹配子串。
用户14527
2022/04/23
1.5K0
Keras vs tf.keras: 在TensorFlow 2.0中有什么区别?
在本文中,您将发现Keras和tf.keras之间的区别,包括TensorFlow 2.0中的新增功能。
AI算法与图像处理
2019/10/31
2.7K0
在Go中使用regexp的FindStringSubmatchIndex方法
在Go语言中,正则表达式是处理字符串的有力工具。Go的regexp包提供了丰富的API来处理正则表达式。在这篇博文中,我们将专注于一个特别的方法:FindStringSubmatchIndex。
运维开发王义杰
2023/08/10
4810
在Go中使用regexp的FindStringSubmatchIndex方法
[1173]regexp_replace()、regexp_substr()、regexp_instr()函数的用法
将source字符串中匹配pattern的子串替换成指定字符串后返回,当输入source, pattern, occurrence参数为NULL时返回NULL,若replace_string为NULL且pattern有匹配,返回NULL,replace_string为NULL但pattern不匹配,则返回原串。
周小董
2023/10/10
1.2K0
[1173]regexp_replace()、regexp_substr()、regexp_instr()函数的用法
Mysql REGEXP
最近在写一个sql 的时候遇到一个问题,like 多个条件,突然忘记语法了,就来重新复习下。
haoming1100
2019/02/14
1.3K0
RegExp对象
正则表达式描述了字符的模式对象。 当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。 简单的模式可以是一个单独的字符。 更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。 您可以规定字符串中的检索位置,以及要检索的字符类型,等等。
天天_哥
2018/09/29
1.5K0
Python和JavaScript在使用上有什么区别?
JavaScript和Python这两种语言非常流行和强大,但它们在部分语法的使用上却有着一些不同,如果你恰好对这些区别对比感兴趣,那么这篇文章中的内容可能会为你提供一些帮助。
葡萄城控件
2021/03/04
4.9K0
Python和JavaScript在使用上有什么区别?
【点滴】在 promise 中 then 和 finally 有什么区别
看上去 promise.prototype.then() 和 promise.prototype.finally 似乎非常相似。但是你需要明白它们有一些重要的差异。
疯狂的技术宅
2021/04/01
2.4K0
BOM与RegExp
BOM     定义:Browser Object Model,定义了操作浏览器的接口     BOM对象: Window, History,Navigator,Screen, Location等     由于浏览器厂商的不同,Bom对象的兼容性极低。一般情况下,我只用其中的部分功能。 Navigator对象     http:// www .w3school .com. cn/ jsref/dom_obj_navigator.asp Location对象     location.hash     “#”后是对浏览器操作的,对服务器无效,实际发出的请求也不包含”#”后面的部分     “#”被算作历史记录 - 转义字符 “\” - 多行字符串 - 字符串换行符\n RegExp     定义:一个新的 RegExp 对象,具有指定的模式和标志。如果参数pattern是正则表达式而     不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新     的 RegExp 对象。     直接量     new RegExp();     个人推荐用直接量 Doctype 1.渲染模式         在多年以前(IE6诞生以前),各浏览器都处于各自比较封闭的发展中(基本没有兼容性可谈)。     随着WEB的发展,兼容性问题的解决越来越显得迫切,随即,各浏览器厂商发布了按照标准模式(遵循     各厂商制定的统一标准)工作的浏览器,比如IE6就是其中之一。但是考虑到以前建设的网站并不支持     标准模式,所以各浏览器在加入标准模式的同时也保留了混杂模式(即以前那种未按照统一标准工作     的模式,也叫怪异模式)。 三种标准模式的写法     1.<!DOCTYPE html>     2.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"        "http://www.w3.org/TR/html4/strict.dtd">     3.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 待穿插知识点     <label>   for 属性  —  > js中表示htmlFor     属性映射 HTML属性 映射到Element属性     img图片预加载     byClassName 自己定义的写法还没写呢     Math.random() 和彩票程序  0-36的随机数     文档碎片     cdn     断点调试     typeof (new Array).__proto__.constructor();
魏铁锤
2022/10/27
7710
BOM与RegExp
BOM 定义:Browser Object Model,定义了操作浏览器的接口 BOM对象: Window, History,Navigator,Screen, Location等 由于浏览器厂商的不同,Bom对象的兼容性极低。一般情况下,我只用其中的部分功能。 复制代码 Navigator对象 http:// www .w3school .com. cn/ jsref/dom_obj_navigator.asp 复制代码 Location对象 location.hash “#”后是对浏览器操作的,对服
用户9979303
2022/10/28
7830
JavaScript RegExp 常用的手机和邮箱正则
在做前端form表单验证的时候,经常,也是必须对input做一下判断,例如邮箱了,手机了,input非空了,input只能输入数字了等等。
Java帮帮
2018/12/18
1.1K0
JavaScript RegExp 常用的手机和邮箱正则
虾皮二面:MySQL 中有哪些锁?表级锁和行级锁有什么区别?
MyISAM 仅仅支持表级锁(table-level locking),一锁就锁整张表,这在并发写的情况下性非常差。
Guide哥
2022/11/07
9230
虾皮二面:MySQL 中有哪些锁?表级锁和行级锁有什么区别?
JavaScript RegExp 对象
请查看我们的 JavaScript RegExp 对象的参考手册,其中提供了可以与字符串对象一同使用的所有的属性和方法。
陈不成i
2021/07/20
7270
BOM与RegExp
BOM 定义:Browser Object Model,定义了操作浏览器的接口 BOM对象: Window, History,Navigator,Screen, Location等 由于浏览器厂商的不同,Bom对象的兼容性极低。一般情况下,我只用其中的部分功能。 复制代码 Navigator对象 http:// www .w3school .com. cn/ jsref/dom_obj_navigator.asp 复制代码 Location对象 location.hash “#”后是对浏览器操作的,对服务
用户10094878
2022/11/21
7790
regexp 正则包
正则对象 正则使用都是通过创建对应的正则对象,调用对象方法所实现。 type Regexp struct { // 内含隐藏或非导出字段 } 新建正则对象 func Print(title string, data ...interface{}) { if len(data) == 1 { fmt.Printf("%s: %v \n", title, data[0]) return } for i, v := range data {
copy_left
2020/12/22
8350
地图函数在 Python 中有什么用?
Python 的 map() 函数将一个函数应用于迭代器中作为输入提供的每个项目。列表、元组、集合、字典或字符串都可以用作迭代器,它们都返回可迭代的映射对象。Map() 是一个内置的 Python 函数。
很酷的站长
2023/02/20
7250
地图函数在 Python 中有什么用?
JavaScript(RegExp正则匹配)
正则表达式是一个描述字符模式的对象。JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法。
aehyok
2018/09/11
4.3K0
Js中RegExp对象
RegExp对象表示正则表达式,是由普通字符和特殊字符也叫元字符或限定符组成的文字模板,用于对字符串执行模式匹配。
WindRunnerMax
2020/09/07
10.6K0
21 - del 和 pop 在删除列表元素上有什么区别
del 和 pop 都可以用来删除列表元素,那么他们有什么区别呢? del(关键字) 根据索引删除列表元素,但没有返回值 pop(方法) 根据索引弹出列表元素,并返回该元素,同时从列表中删除该元素 a = [4, 3, 1 ,5] print(a) del a[2] print(a) print(a.pop(1)) print(a) print(a.pop()) print(a) [4, 3, 1, 5] [4, 3, 5] 3 [4, 5] 5 [4]
ruochen
2021/05/23
4340
21 - del 和 pop 在删除列表元素上有什么区别
点击加载更多

相似问题

范围服务DI & GC在.net核心-澄清?

13

带上下文的Asp.net核心DI

20

带有DI的HtmlSanitizer + ASP.NET核心2

12

使用Asp.Net核心DI的服务的配置范围

23

使用带有运行时参数的.NET核心DI?

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文