auth

Auth认证模块 本文目录回到目录Auth模块是Django自带的用户认证模块:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。 authenticate() 提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、passwor 阅读详情

常见的认证方案

1. HTTP Auth Authentication

这是HTTP提供的一个用于权限控制和认证的通用框架,其中最常用的HTTP认证方案就是HTTP Basic Authentication

[ 鉴权流程 ]
客户端发送一需要权限验证的请求,服务端返回未授权,需要授权。
客户端发送带有认证信息的请求,服务端验证并返回结果。

[ 加解密过程 ]

// 加密过程
let email = 'demo@test.com'
let password = '1234455'
let auth = `${email}:${password}`
const buf = Buffer.from(auth, 'ascii')
console.info(buf.toString('base64'))
// 解密过程
const buf = Buffer.from(authorizaiton.split(' ')[1] || ''), 'base64')
const user = buf.toString('ascii').split(':')

[ 其他HTTP认证 ]
基于HTTP身份验证框架的方案有多个,它们的安全强度不同有所不同。
常见的验证方案包括:

  • Basic(RFC 7616, Base64编码凭证)
  • Bearer(RFC 6750, bearer令牌通过OAuth2.0保护资源)
  • Digest(RFC 7616, 只有md5散列在Firefox中支持)
  • HOBA(RFC 7486, HTTP Origin-Bound认证,基于数字签名)
  • Mutual
  • AWS4-HMAC-SHA256

就先抄过来认个名儿吧!


2. Cookie + Session

用户在注册时提交用户名和密码,后端将密码“加盐”后存入数据库。

[ 鉴权流程 ]
用户提交用户名密码
服务端计算该用户SHA256并验证,若验证通过,为其创建一个Session对象,并将session_id用setCookie返回给浏览器
浏览器将session_id存到Cookie中,之后每次请求都带上Cookie
服务端收到带有session_id的request,根据session_id确定当前请求的用户,返回其请求数据。

[ Session存储 ]
常用的Session存储方式是键值对存储(KV存储),例如Redis,which在分布式、API支持、性能方面表现较好。其他的还有mysql, file存储等。

如果服务是分布式的,使用file存储的话,就存在多个服务间的同步问题,以及高并发情况下的读写锁控制问题。

[ Session刷新 ]
不能等到Session到期后就把用户踢下线,用户的操作要更新Session的存活时间。
但频繁的更新Session会影响性能,可以再session快过期的时候再更新expire
用户频繁操作将会导致sid长期有效, 这使得cookie更容易泄露,泄露时间更长,可以在生成sid的时候同时生成refreshId,用来在sid过期后请求新的sid(在这种模式下,用户操作不延长sid有效期),这要求前端判断sid失效并主动使用refreshId请求new_sid.

[ 单设备登录 ]
服务端建立起用户唯一标识与sessionId的对应关系,同一用户只能有唯一session,若多设备登录,可返回不允许登录或者挤掉之前登录用户。(默认情况下是可以多设备登录的)

3. JWT(Json Web Token)

[ 简介 ]
JWT是一个开发标准(RFC 7519),它以JSON对象传递信息,自包含,具有数字签名。

[ JWT组成 ]
header + payload + signature,以小数点分隔

UzI1NiIsInR5cCI.qaWUiLCJpYX.jRDjF4JfZcmq

上面只是个样子,真正Base64太长了,不好看

解码后:

// header
{"alg": "HS256", "type": "JWT"}

// payload
{"name": "demo", "iat": "1604737078045", "expire": "1604837078045"}

// signature
const encodedHeader = base64Encode(header)
const encodedPayload = base64Encode(payload)
const signature = HMACSHA256(encodedHeader + '.' + encodedPayload, '密钥')

[ 鉴权流程 ]
用户提交用户名密码
服务端计算SHA256验证通过,使用密钥创建JWT并放入set-Cookie
浏览器发送请求时带上JWT
服务端验证JWT,验证通过,根据 JWT payload获取用户信息,根据用户信息返回所请求数据。

[ Token校验 ]
服务端根据encodedHeader, encodedPayload以及密钥计算出signature与请求携带的JWT进行对比,若部分相等,则其是一个有效的JWT。

[ Token刷新 ]
同样地,为减少JWT泄露风险,一般会设置较短的有效期,不可能让用用户频繁登录去获取新的JWT
可以在生成JWT同时生成Refresh Token,用于请求新的JWT,Refresh Token只能使用一次。


4. OAuth

OAuth (Open Auth) 是一个开发标准,允许用户让 third-party app 访问某一网站下的 private resource,而不需要将用户名密码提供给第三方。

[ 授权流程 ]
登录京东商场时,选择“使用微信号登录”,页面跳转到微信页面,“京东商城”想要访问你的个人信息,你是否同意?
同意!微信给京东一个授权码
京东使用授权码请求你微信中的数据信息

[ OAuth其他模式 ]

  • 简化模式(Implicit grant type)
  • 密码模式(Resource Owner Password Credentials Grant)
  • 客户端模式(Client Credentials Grant)

其中,简化模式适用于纯前端应用,直接向前端颁发令牌;密码模式指的是:对于高度信任的应用,可以将用户名密码告诉该应用,它就可以直接使用密码申请令牌了;客户端模式适用于没有UI的命令行应用。

[ 单点登录 }
单点登录(Single Sign On)指的是登录某个网站一次,就可以直接访问其域名/旗下其他服务而不需要再登录。


总结

[ HTTP Auth ]
适用于内部安全性不高的系统上,例如路由器网页管理接口
存在问题:

  • 请求携带验证信息,容易被嗅探到
  • 无法注销
  • 适合一次性验证,例如注册连接激活

[ Cookie+Session ]
适用于传统系统独立鉴权
梳理:

  • 服务端存储session,客户端存储cookie,cookie保存的是sid
  • 可以灵活revoke权限,更新信息后可以方便地同步session中相应内容
  • 分布式session一般使用redis或其他KV存储

[ JWT ]
优点:

  • 服务端不需要存储session,方便扩展
  • JWT不依赖Cookie,可以通过HTTP header传递
  • 为减少盗用,使用HTTPS传输

适用于做简单的 RESTful API 认证和一次性验证,例如注册激活链接。
问题:

  • 有效期内Token一直有效,无法中途废弃
  • payload信息更新时,已下发token无法同步

[ OAuth ]
OAuth是一个开发标准,允许用户授权第三方应用使用其其他App的个人信息而不提供用户名和密码
分为四种模式:

  • 简化模式:不安全,适用于纯静态页面应用
  • 授权码模式:功能完善,流程严密的授权模式,通常使用在公网开放平台
  • 密码模式:一般在内部系统中使用,调用者以用户为单位
  • 客户端模式:一般在内部系统之间的API调用。两个平台之间调用,以平台为单位。

本文学习源全栈修仙之路

项目管理工具Jira中的Auth1和Auth2认证 文档在此:https://developer.atlassian.com/cloud/jira/platform/jira-rest-api-oauth-authentication/ Auth1认证流程 下面来详细说明sso中的Auth1完整流程: 以微信小程序为例子: 微信小程序服务器会提供一个接口,当然这个接口是只提供给开发者,开发者用client_id+redirect_url去微信端... 阅读详情

相关推荐

PHP Auth权限认证类

Auth和RBAC Rbac: Rbac是基于节点控制,根据3级节点,module,controller,action,节点类似与树形结构,3级节点间相互有关联 表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表 根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作 Auth: 是对规则进行认证,不是对节点进行认证。用户可以把...

自学it的攻城狮 4557

Auth权限认证详解

权限认证是确保系统安全的重要组成部分。通过用户身份验证和权限授权,可以有效地控制用户对系统资源的访问。Spring Security和JWT是实现这一目标的强大工具。希望本文能帮助你更好地理解和应用权限认证。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章SpringBoot实战:Spring Boot接入Security权限认证服务springSescurity+JWT权限框架基础使用模板。

ning的博客 2457

Django之Auth模块

文章目录一、 Auth模块是什么二、 auth模块常用方法authenticate()login(HttpRequest, user)logout(request)is_authenticated()login_requierd()create_user()check_password(password)set_password(password)三、 User对象的属性四、 扩展默认的auth_user表五、 auth模块补充六、 总代码主页 auth_page.htmlhome.html登录 login

大大的博客 1872

Web: Auth权限认证

Http中的Auth: 分2种: authorization:针对权限。e.g:后端非管理员接口的调用403(权限不足) authentication:针对用户名密码登录的身份认证。错误码是401.(没有登录) HTTP中如何认证身份: http是无状态的,会导致一个问题: 第一次请求中进行了登录,第2次请求执行一些操作的时候,在这次请求是不知道上一次请求是已经登录的,所以第2次请求也是...

手写我对你的温柔 6061

大模型LLM部署方式

建议根据实际需求选择方案,企业级服务优先考虑vLLM或TGI,个人用户可尝试Ollama或Hugging Face本地加载。若需完整代码示例,可参考网页2的VLLM实战或网页5的TGI部署案例。:高并发、低延迟的API服务,需分布式推理支持。:快速创建可分享的Web应用。:个人开发、快速原型验证。

u010249118的博客 516

FPGA之道(22)VHDL基本程序框架

在介绍详细的VHDL语法之前,让我们先来了解一下VHDL代码的基本程序框架,这样可以让我们先对VHDL程序设计有一个整体的概念把握,进而在后续的VHDL语法学习中做到有的放矢。

Reborn Lee 8306

什么是Auth模块?(全面了解)

目录一:Auth模块1.什么是Auth模块?2.Auth模块作用二:引入Auth模块1.其实我们在创建好一个Django项目之后直接执行数据库迁移命令会自动生成很多表2.django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且还必须是管理员用户才能进入3.创建超级用户(管理员)4.Django自带的admin后端管理5.需求6.方法总结三...

sunliusen的博客 4993

IPC-7351标准实战:如何用LPWizard_10快速生成PCB封装库(附避坑指南)

本文提供了一份详细的IPC-7351标准实战指南,手把手教你使用LPWizard_10软件快速生成符合行业标准的PCB封装库,并直接导入Cadence Allegro。文章深入解读了IPC-7351密度等级的选择逻辑,并重点分享了软件配置、QFN封装生成实战步骤,以及导出失败、焊盘异常等常见问题的避坑解决方案,旨在帮助硬件工程师提升设计效率和可靠性。

weixin_29207439的博客 153

一个小白对auth的理解

---恢复内容开始--- PS:最近需要做一个验证用户权限的功能,在官方和百度看了下,发现大家都是用auth来做验证,官方有很多auth的使用教程,但是都不全面,我也提问了几个关于auth的问题 也没人来回答我,无奈只好一步步看代码研究了。本人基础不好,属于半路出家的那种,希望我的教程大家不要见笑。 新手纯属无奈之举。。。 废话不多开始解密: 首先说下我使用的Thinkphp版本:Th...

weixin_30618985的博客 1673

【FLINK+Kerberos+kafka】在华为云上 bootstrap.server使用IP的GSS initiate failed 问题处理

目前互联网上所有的资料显示都是说没有正确设置KDC之类的,但本博主实际通过java代码低版本 如使用kafka-client 0.11.0 ,2.4.0等版本手动创建kafkaconfig 或者使用华为云的LoginUtils类 都能够正常链接,所以应该是高版本添加了相关配置,或者flink在subtask 创建kafkaAdminClient时 丢弃或使用了默认的一些配置行为,导致了客户端和kdc验证之间出现了principal 不一致导致验证失败。client.dns.lookup配置项作用。

honghanyue1791的博客 574

Office Tool Plus:正版Office干净部署指南

Office部署是Windows新机配置的关键环节,涉及版本选择、架构匹配、语言支持与合规激活等基础技术问题。其核心原理基于微软官方Office Deployment Tool(ODT)的声明式XML配置机制,通过标准化流程确保安装可复现、可审计、无第三方捆绑。技术价值在于规避官网安装器的版本锁定、架构误配和语言缺失等常见风险,提升部署稳定性与安全性。典型应用场景包括企业批量部署、IT运维标准化、隐私敏感型用户自主安装。本文以Office Tool Plus为实践载体,深入解析ODT底层逻辑、XML配置规范

1176

openstack Missing value auth-url required for auth plugin password

按照openstack官网安装,执行: openstack project create --domain default \ --description "Service Project" service 出现 : Missing value auth-url required for auth plugin password [root@controller ~]# opens...

Man_In_The_Night的博客 2万+

基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像

当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。 在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服务器上需要配置云产品流转,让设备A的数据上传后自动发送给设备B。这样就完成了视频画面数据的流转。不过因为阿里云的最大数据限制,每次最大发送10240字节的数据。

1万+

开源项目 go-auth0/auth0 常见问题解决方案

开源项目 go-auth0/auth0 常见问题解决方案 项目基础介绍和主要编程语言 go-auth0/auth0 是一个用于 Auth0 平台的 Go 语言 SDK。Auth0 是一个身份验证和授权平台,帮助开发者轻松实现用户认证和授权功能。该项目的主要编程语言是 Go,适用于需要在 Go 项目中集成 Auth0 服务的开发者。 新手在使用这个项目时需要特别注意的3个问题及解决步骤 1. 环境配...

gitblog_00314的博客 935

AutoSAR系列讲解(入门篇)4.6-BSW的Watchdog功能

BSW的看门狗功能

雪云飞星的博客 1万+

Python 爬虫实战:Twitter 数据定向抓取(特定话题 + 用户推文爬取与分析)

在社交媒体研究、舆情监测和市场分析等领域,Twitter 数据具有极高的价值。本文将详细介绍如何使用 Python 构建一个完整的 Twitter 数据爬取系统,包括特定话题和用户推文的爬取与分析。我们将涵盖从认证到数据存储、清洗、分析和可视化的全流程。

u014481728的博客 1033

Auth0 Golang API 示例教程

Auth0 Golang API 示例教程 项目介绍 auth0-golang-api-samples 是一个由 Auth0 提供的开源项目,旨在帮助开发者使用 Go 语言创建一个仅在包含有效访问令牌时才允许访问资源的 API。该项目通过验证由 Auth0 签名的 JSON Web Token (JWT) 的签名和声明来实现这一功能。这些示例不涉及如何签署 JWT,而是假设用户已经通过身份验证。 ...

gitblog_00283的博客 1071

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

auth组件详解

目录 auth模块介绍 auth模块的常用方法 扩展默认的auth_user表 1. auth模块介绍 用户认证系统 , 默认使用Django的auth_user 表来保存用户信息 其中包括一些常用字段 提供了一些用户登录认证等相关方法 2. auth模块的常用方法 首先导包 from django.contrib import auth 1. 创建...

剑魂的博客 2180

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Auth0认证

Auth0认证Auth0 认证目标场景Step 1 - Configure Auth0Step 2 - LoginStep 3 - Calling an APIAuthorization Code Flow with Proof Key for Code Exchange (PKCE) Auth0 认证 这个项目是用于理解 Auth0 在 react 项目中如何实现身份验证、授权和许可。 Auth0 作为身份认证云服务商,提供了一整套 SDK 和 API 便于 APP 开发者可以更加关注与业务逻辑实现。 目

levin blog 3604

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

rbac与auth权限认证的区别

RBAC是基于角色的权限管理系统。 AUTH是基于节点的权限管理系统。 对于这两种权限管理的认识来自两个不同的系统,PHPCMS V9 与OneThink。 RBAC 可以将不同的用户分配给不同的用户组,即角色,每个角色享有不同的系统管理权限,但是如果角色之间的权限有交差时,可能会出现分工不明的情况,比如,有编 辑与管理员两个组,编辑要求对文章列表有添加与修改的权限,管理员对文章

qq_36952650的博客 8975

pop3协议auth指令总结

在使用Pop3协议时用到auth指令,现总结如下: AUTH机制[初始响应] 机制:标识SASL认证机制的字符串 初始响应:可选的初始客户端响应,如在[RFC4422]的第3节中定义。如果存在, 这个回应必须编码为Base64(在第4节中指定)[RFC4648]),或者仅由单个字符 “=”组成,其中代表一个空初始响应。 限制: AUTH命令成功完成后,不再需要 AUTH命令在同一会话中...

weixin_33724046的博客 1094

Auth模块的使用

按上面的方式扩展了内置的auth_user表之后,一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password)等。

m0_71115526的博客 1292

Redis的AUTH

Redis的AUTH 修改yml文件,以方便后期修改Redis配置信息 在opt目录下,新建docker_redis文件夹并在其目录下创建conf文件夹。再创建一个空的redis.conf文件

qwq1518346864的博客 7009

怎么使用Django自带的auth_user模型

前言  大家在安装Django成功后,创建一个admin管理员就能管理我们的数据了,但是大家有没有想过我们创建管理员的信息被存储在那里了呢? 解答  首先,虽然我们在项目开始时没有编写任何模型,但是我们也可以执行迁移文件的命令 python manage.py makemigrations python manage.py migrate 然后我们会发现也会生成很多的表单,这是Django...

CurtainOfNight的博客 3784

openstack 使用openstack命令进行操作时报错Missing value auth-url required for auth plugin password

安装openstack中 #输入命令 openstack compute service list --service nova-compute #报错 Missing value auth-url required for auth plugin password 新建admin-openrc.sh(目录位置不重要,记住位置就行),内容如下,记得修改OS_PASSWORD的值,我的是123456 export OS_USERNAME=admin export OS_PASSWORD.

qq_42533216的博客 1万+

nuxt-auth0实战指南:如何用Nuxt.js快速集成Auth0实现用户认证

在现代Web应用开发中,用户认证是不可或缺的一环。本指南将向你展示如何通过**Nuxt.js**与**Auth0**的无缝集成,快速实现安全可靠的用户认证功能。无论是构建个人项目还是企业级应用,这个简单而强大的组合都能帮助你轻松搞定用户登录、身份验证和权限管理。 ## 📋 准备工作:环境与依赖检查 在开始集成之前,请确保你的开发环境满足以下要求: - Node.js (v12或更高版本)

gitblog_00577的博客 862
上一篇: 06 Fragments
下一篇: Github开源项目收藏
zyan_cn
博客等级 码龄9年 4粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值