Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >说说web应用程序中的用户认证

说说web应用程序中的用户认证

作者头像
somenzz
发布于 2020-11-25 02:25:17
发布于 2020-11-25 02:25:17
2.3K0
举报
文章被收录于专栏:Python七号Python七号

阅读本文大概需要 3 分钟。

我们都知道 web 应用程序分两个部分,即前端和后端。

前端发送请求,后端返回数据。这里后端是指服务器,前端是指浏览器。

后端只能收到前端发送的请求头,请求参数,及资源定位符(url)。在没有用户认证的情况下,无论前端是谁,只要发送的请求一样,后端返回的数据也是一样的,前端人人平等,后端对他们一视同仁。

随着技术的发展,用户的增加,后端的服务器越来越跑不动了,因为前端的请求太多了,有些资源并不想让所有用户查看,还有些是恶意请求,会导致服务器崩溃(DDoS 攻击)。

因此,后端必须验证前端的身份,根据前端是否拥有相应的权限,来确定是否返回对应的数据。于是很多网站都有用户登陆、注册功能,只有登陆的用户才可能做更多的事情。

但是 http 设计之初是无状态的,也就是说每次请求,服务器都认为这是一个新的请求,之前的请求是否发生过,服务器并不知道。用户登陆时服务器验证通过,但用户的下一次请求时,服务器已不记得用户是否登陆过,这就需要借助一些额外的工具来实现有状态的请求。这就是 cookie(小甜品)。

用户第一次登陆服务器时,服务器生成一些和用户相关联的信息,比如 session_id,token,user_id,可能是一个,也可能是多个,都是经过加密的,把这些信息放在 cookie 中,返回给前端用户,用户下一次请求时,附带上这个 cookie ,服务器拿到这个 cookie,就知道用户之前已经登陆过了,这就变成了有状态的请求。

服务器可以设置相关信息的过期时间,比如 2 个小时,那么用户登陆网站后,2 个小时内未做任何操作,那么 2 个小时后,再次发送请求,服务器就会认为未登陆,需要重新登陆。

登陆后的一系列请求,借助于 cookie,服务器就能确认是哪个用户,然后根据角色、权限确认哪些用户拥有哪些资源的访问权限,这样就实现了用户认证,权限控制等一系列复杂的功能。

那么问题来了,使用 Django Rest Framework 框架实现后端 REST API 时,如何做好用户认证呢?

在 Django Rest Framework 中,认证功能是可插拨的,非常方便。REST框架提供了现成的身份验证方案,如下。并且还允许您实现自定义方案。

1、BasicAuthentication 此身份验证方案使用 HTTP 基本身份验证,该身份针对用户的用户名和密码进行了签名。基本身份验证通常仅适用于测试。

2、TokenAuthentication 此身份验证方案使用简单的基于令牌的 HTTP 身份验证方案。令牌认证适用于客户端-服务器设置,例如台式机和移动客户端。

3、SessionAuthentication 此身份验证方案使用 Django 的默认会话后端进行身份验证。会话身份验证适用于在与您的网站相同的会话上下文中运行的 AJAX 客户端。

4、RemoteUserAuthentication 通过此身份验证方案,您可以将身份验证委派给 Web 服务器。

但是对于需要前后端分离的生产环境来说,方式 1 不适用,官方已经说明仅适用于测试。方式 4 也不适用,没有多少人愿意委派别人来验证自己的用户。方式 2 并不安全,可能导致 XSS 攻击,方式 3 采用 django 默认的会话后端,适用于在与网站相同的会话上下文中运行的 AJAX 客户端,也不适用前后端分离这种方式。

这里必须要自己实现自定义的验证吗?其实不然,这里我推荐使用: JSON Web Token,也就是 django-rest-framework-jwt 安全加密功夫做得比较足,而且工作原理也清楚明了,使用也简单。适合用于向 Web 应用传递一些非敏感信息,经常用于设计用户认证和授权系统,实现 Web 应用的单点登录

Json Web Token(JWT)

JWT 是一个开放标准 (RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。

JWT 使用方法:

  1. 首先,前端通过 Web 表单将自己的用户名和密码发送到后端的接口。这一过程一般是一个 HTTP POST 请求。建议的方式是通过 SSL 加密的传输(https协议),从而避免敏感信息被嗅探。
  2. 后端核对用户名和密码成功后,将用户的 id 等其他信息作为 JWT Payload(负载),将其与头部分别进行 Base64 编码拼接后签名,形成一个 JWT。形成的JWT 就是一个字符串。
  3. 后端将 JWT 字符串作为登录成功的返回结果返回给前端。前端可以将返回的结果保存在 localStorage 或 sessionStorage 上,退出登录时前端删除保存的 JWT 即可。
  4. 前端在每次请求时将 JWT 放入 HTTP Header 中的 Authorization 位。(解决XSS 和 XSRF 问题)
  5. 后端检查是否存在,如存在,则验证 JWT 的有效性。例如,检查签名是否正确;检查 Token 是否过期;检查 Token 的接收方是否是自己(可选)。
  6. 验证通过后后端使用 JWT 中包含的用户信息进行其他逻辑操作,返回相应结果。

阅读原文发表你的看法。

专注于Python技术分享

欢迎订阅、在看、转发

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于R安装中文分词包安装不上的问题install.packages(\"tm\")
使用默认方法安装相关R中文文本挖掘包(tmcn、Rwordseg、Rweibo)时,会出现安装失败。合适的方法是:通过源代码安装相关包的程序:手工下载源代码及其依赖,然后编译安装。 首先是基础性的tm包。tm包是R文本挖掘的通用包。直接使用install.package即可安装。本帖隐藏的内容 1 install.packages("tm")tmcn、Rwordseg、Rweibo是李舰等人开发的中文文本挖掘包。三个网页(官网)中提供了包说明与安装方法。但经测试,其中的安装方法不可用。正确的安装方法
学到老
2019/02/13
8170
R语言中文分词工具
Rwordseg、Rweibo、tm的安装 使用默认方法安装相关R中文文本挖掘包(tmcn、Rwordseg、Rweibo)时,会出现安装失败。合适的方法是:通过源代码安装相关包的程序:手工下载源代码及其依赖,然后编译安装。 首先是基础性的tm包。tm包是R文本挖掘的通用包。直接使用install.package即可安装。 1 install.packages("tm") tmcn、Rwordseg、Rweibo是李舰等人开发的中文文本挖掘包。三个网页(官网)中提供了包说明与安装方法。但经测试,其中的安
学到老
2018/03/16
8040
安装rJava包
当我们安装rJava时发现,载入不了报错。这是因为电脑没有JAVA运行环境,故需要下载安装JAVA,并配置环境变量。
用户1359560
2020/12/22
1.1K0
安装rJava包
用R进行文本挖掘与分析:分词、画词云
要分析文本内容,最常见的分析方法是提取文本中的词语,并统计频率。频率能反映词语在文本中的重要性,一般越重要的词语,在文本中出现的次数就会越多。词语提取后,还可以做成词云,让词语的频率属性可视化,更加直
小莹莹
2018/04/23
2.4K0
用R进行文本挖掘与分析:分词、画词云
R语言进行分析,比较详细的一篇,亲测过哦
要分析文本内容,最常见的分析方法是提取文本中的词语,并统计频率。频率能反映词语在文本中的重要性,一般越重要的词语,在文本中出现的次数就会越多。词语提取后,还可以做成词云,让词语的频率属性可视化,更加直观清晰。比如下图: 这是根据总理2014年的政府工作报告制作的可视化词云,分词和词云的制作都是用R,词频的统计用了其他软件。这个图能很直观看到,工作报告的重心是"发展",这是大方向,围绕发展的关键要素有经济建设、改革、农村、城镇等要素。不过这张图中的词语还需要进行优化,因为有些术语或词组可能被拆分成了更小的词语
学到老
2018/03/16
9360
R语言进行分析,比较详细的一篇,亲测过哦
R语言怎么给中文分词?
Rwordseg包依赖于rJava包。由于Rwordseg包并没有托管在CRAN上面,而是在R-Forge上面,因此在在R软件上面直接输入install.packages("Rwordseg")会提示错误。
IT阅读排行榜
2018/08/16
9130
R语言怎么给中文分词?
使用R语言将微信记录制作成词云(简洁)--情人节奥义
参照百度的方法,使用同步助手。安装同步助手--连接手机(安卓苹果均可)--点击“其他功能“--点击微信图标即可进入聊天记录导出界面(非常简单)。
用户1680321
2022/03/10
8370
使用R语言将微信记录制作成词云(简洁)--情人节奥义
r与rjava
前言 Java语言在工业界长期处于霸主地位,Java语法、JVM、JDK、Java开源库,在近10年得到了爆发式的发展,几乎覆盖了应用开发的所有领域。伴随着Java的全领域发展,问题也随之而来了。语法越来越复杂,近似的项目越来越多,学好Java变得很难。对于没有IT背景的统计人员,学用Java更是难于上青天。 R一直是统计圈内处于佼佼者的语言,语法简单,学习曲线不太长也不太陡。如果能结合Java的通用性和R的专业性,碰撞出的火花,将会缤纷绚烂。 本文将介绍R与Java连接的高速通道,rJava通信方案。另外
学到老
2018/03/16
1.3K0
r与rjava
R文本挖掘-中文分词Rwordseg
本文主要介绍了如何使用 R 语言对中文文本进行分词和词频统计。首先介绍了 R 语言中的 tm 包和 Rwordseg 包,然后通过一个示例展示了如何使用这两个包进行中文分词和词频统计。最后,介绍了一些常用的分词方法,并给出了一个使用 wordcloud 包进行词云展示的示例。
Erin
2018/01/09
1.7K0
R文本挖掘-中文分词Rwordseg
hadoop-R语言-安装NLP自然语言分析包
引言: R语言是一种非常强大的分析与展示的统计科学家工具,其也提供了若干关于自然语言的分析处理工具,本文讲展示如何在Linux进行安置。 1.  自然语言处理(NLP)   对于英语体系,基于空格可以直接进行分词,而中文则不同,需要进行分词,然后进行后续处理。NLP是natural language processing的缩写,专指此类的工作。     自然语言处理包: Snowball, RWeka     文本挖掘: tm     分词工具: Rwordseg 2.  所属环境     Linux: c
学到老
2018/03/16
8950
hadoop-R语言-安装NLP自然语言分析包
R︱Linux+Rstudio Server尝鲜笔记(打造最佳Rstudio体验+报错的解决方案)
Rstudio Server 是Rstudio开发的基于R语言的网页版(只能在Linux),你在手机上都可以运行R,还是挺方便的。就是配置起来有点麻烦。 官方下载链接:https://www.rstudio.com/products/rstudio/download-server/
悟乙己
2019/05/27
11K0
Android开发笔记:Android开发环境搭建
JDK 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
朝雨忆轻尘
2019/06/19
1.4K0
Android开发笔记:Android开发环境搭建
如何使用R连接Hive与Impala
继之前的文章讲述如何在Redhat中配置R环境和如何在Redhat中安装R的包及搭建R的私有源后,那我们如何使用R连接CDH集群中的Hive和Impala进行数据分析呢?本文档主要讲述如何使用R连接Hive和Impala,并分别通过命令行和CDSW进行演示。
Fayson
2018/03/29
2.6K0
如何使用R连接Hive与Impala
用R进行文本分析初探——包含导入词库和和导入李白语句
用R进行文本分析初探——以《红楼梦》为例 一.写在前面的话~   刚吃饭的时候同学问我,你为什么要用R做文本分析,你不是应该用R建模么,在我和她解释了一会儿后,她嘱咐我好好写这篇博文,嗯为了娟儿同学,细细说一会儿文本分析。 文本数据挖掘(Text Mining)是指从文本数据中抽取有价值的信息和知识的计算机处理技术。顾名思义,文本数据挖掘是从文本中进行数据挖掘(Data Mining)。从这个意义上讲,文本数据挖掘是数据挖掘的一个分支。 文本分析是指对文本的表示及其特征项的选取;文本分析是文本挖掘、信息
学到老
2018/03/19
2.5K1
用R进行文本分析初探——包含导入词库和和导入李白语句
r软件安装过程中,rjava 安装完成版
在做文本挖掘的时候,会发现分词时候rJava是必须要迈过去的坎儿,所以进行了总结: 第一步:安装rJava和jdk install.packages("rJava") JDK: D:\jdk R: D:\spss 21\R-3.0.1 1.配置好java 2.配置rJava 第二步:设置环境变量 ,涉及java调用R(我的电脑右键-属性-高级设置-环境变量) CLASSPATH=D:\spss 21\R-3.0.1\library\rJava\jri; PATH=D:\spss 21\R-3.0.
学到老
2018/03/16
9320
R分词继续,\"不|知道|你在|说|什么\"分词添加新词
单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallseg库 词库:Sougou词库,Sougou输入法官网可下载 这里只先介绍单机的实现: 1、R语言:专门用于统计分析、绘图的语言 2、Rwordseg分词包:引用了@ansj开发的ansj中文分词工具,基于中科院的ictclas中文分词算法,无论是准确度还是运行效率都超过了rmmseg4j。
学到老
2019/02/28
8040
r安装包的详解
安装R语言的包的方法: 1. 自动安装(在线安装) 在R的控制台,输入 install.packages("gridExtra")  # 安装 gridExtra install.packages("stepNorm", contriburl="http://www.your.url",  dependencies = TRUE) # 安装 stepNorm 若要指定安装目录 (e.g. “mydir”),则输入 install.packages("stepNorm", contriburl="http:/
学到老
2018/03/16
1.1K0
1. 读取excel文件的辛酸之旅
本文介绍了读取Excel文件的辛酸历程,包括无法安装R包、安装依赖包、安装JDK以及解决编码问题等。作者通过一系列操作,最终成功读取了Excel文件。
锦小年
2018/01/02
1.1K0
1. 读取excel文件的辛酸之旅
eclipse安装教程(win10版本,很全的)
第一步:下载JDK。 先给上下载链接:http://www.oracle.com/technetwork/java/javase/downloads/index.html
全栈程序员站长
2022/07/01
1.3K0
eclipse安装教程(win10版本,很全的)
R分词继续,\"不|知道|你在|说|什么\"分词添加新词
* 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallseg库 词库:Sougou词库,Sougou输入法官网可下载 这里只先介绍单机的实现: 1、R语言:专门用于统计分析、绘图的语言 2、Rwordseg分词包:引用了@ansj开发的ansj中文分词工具,基于中科院的ictclas中文分词算法,无论是准确度还是运行效率都超过了rmmseg4j。 * 环境准备 (Windows或Linux版本都行): R下载:http://mirrors.us
学到老
2018/03/19
1.1K0
R分词继续,\"不|知道|你在|说|什么\"分词添加新词
推荐阅读
相关推荐
关于R安装中文分词包安装不上的问题install.packages(\"tm\")
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档