当前位置: 首页 > article >正文

Http基础认证摘要认证

本文主要讲述了基于flask实现了http的基础认证和摘要认证。

1. 基本认证机制

工作原理

  1. 客户端向服务器端发送网络请求时,没有携带任何认证信息

  2. 服务器接收到请求后检查请求头是否具有authorization的键值对

    1. 如果具有该键值对,则对收到的authorization的值,进行解密,获取对应的用户登录信息;根据用户登录信息,正常回复网页

    2. 如果不存在该键值对,则响应401状态码,并在响应头中设置www-authorization键值对

  3. 客户端接收到401状态码的响应后,输入用户登录凭证,此时请求头中会添加authorization键值对

加密算法

  1. 客户端将用户输入的用户名username和密码password,组合成新的字符串username:password

  2. 然后利用base64加密算法对username:password字符串加密,形成密文hashedstr

  3. 客户端将Basic字符串和hashedstr拼接,写入authorization请求头中

代码实现

from flask import Flask,make_response,request, redirect
import base64


app = Flask(__name__)

@app.route('/basic')
def basic():
    authorization = request.headers.get('authorization')  # 对http基本认证的实现, 密文的格式为: `用户名:密码`
    if not authorization:
        resp = make_response()
        resp.headers['www-authenticate'] = '''Basic realm= home'''

        return resp, 401
    else:
        print(authorization)
        
        bdecode = base64.b64decode(authorization.split(' ')[-1])
        name = bdecode.decode('utf-8').split(':')[0]  # 用户名
        m = hashlib.md5()
        m.update('123456'.encode('utf-8')) # 此处需要进行数据库用户密码的获取
        pwd = m.hexdigest()
        input_pwd = bdecode.decode('utf-8').split(':')[-1] # 用户输入的密码
        # 此处需要对比pwd和input_pwd
        return redirect('/digest')

基本认证的示例:

 WWW-Authenticate: Basic realm="Access to the staging site", charset="UTF-8"
 ​
 Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

前端的登录


http://www.kler.cn/a/467341.html

相关文章:

  • 算法:两个升序单链表的合并
  • 【Uniapp-Vue3】swiper滑块视图容器的用法
  • 【可实战】测试用例组成、用例设计方法、用例编写步骤、测试用例粒度、用例评审(包含常见面试题)
  • 【网络安全 | 漏洞挖掘】通过模拟功能实现提权(Bugcrowd)
  • 在线二维码生成器-GO在线工具-文本工具
  • win10 npm login 登陆失败
  • uniapp实现后端数据i18n国际化
  • [CTF/网络安全] 攻防世界 get_post 解题详析
  • 基于Java+Netty搞了个类似teamviewer、向日葵、ToDesk的远程桌面工具
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 1:背景动机
  • Ruby 中文编码
  • 【竞技宝】CS2:HLTV 2024 TOP11-w0nderful
  • Tailwind CSS 使用简介
  • 基于SpringBoot在线竞拍平台系统功能实现十五
  • 【Linux】定时运行shell脚本
  • DNS分块矩阵的理解
  • 遇到复杂的 递归查询sql 需要oracle 转pgsql 可以把数据表结构给ai
  • 挑战春招找到java后端实习第三天(1.4)
  • C++语言编程————C++的输入与输出
  • --- UDP和TCP传输协议 ---
  • 5G NTN(七) 高层(1)
  • git submodule的使用:将别人的git仓库作为自己的子仓库
  • uniapp3 手写签名组件(vue3 语法)封装与应用
  • DVWA靶场Insecure CAPTCHA(不安全验证)漏洞所有级别通关教程及源码审计
  • 《Android最全面试题-Offer直通车》目录
  • 喜报|富唯智能荣获暨2024年广州科技创新创业大赛二等奖