web认证

作者: Island123 | 来源:发表于2018-05-12 16:38 被阅读0次

关于我正在做的路由器的web认证方式是这样的:

  1. 客户端首先向服务器发送一条不带认证的get。

  2. 服务器返回 Authorization Required, 并且返回的头信息中含有随机数nonce

  3. 客户端根据返回的nonce、用户名密码等计算出一个request发给服务器,并且还会会送一个cnonce用于后续通信

  4. 大致过程如下:


    认证过程
  • 客户端第一次请求,并未包含任何认证信息:


    客户端第一次get
  • 服务器返回Authorization Required,同时包含一个nonce:


    Authorization Required
  • 客户端发送认证请求,可以看到认证字段中包含了nonce,cnonce,nc,以及responce等参数:


    客户端认证

下面尝试用python模拟这个过程

  1. 获取服务器nonce:
    这个过程由客户端先向服务器发送一条不带认证get,在服务器返回Authorization Required消息时从消息头中获取服务器的nonce参数。代码实现如下:
res = requests.get('http://192.168.80.131')  #模拟第一次get
res.headers['WWW-Authenticate'].rpartition('nonce="')[2][:-1]  #从服务器返回信息头中抽取nonce字段
  1. 根据服务器参数以及用户密码等计算response参数:
    具体算法如下:
    Response = MD5(md5(your user name:relam:passwd):nonce:nc:cnonce:auth:md5('GET:/index.html'))
    详情可见这个博客很清楚:
    http认证
    代码实现如下:
import hashlib
a = hashlib.md5('admin:_00:admin'.encode(encoding='utf-8')).hexdigest()
b = hashlib.md5('GET:/'.encode(encoding='utf-8')).hexdigest()
c = a+":"+nonce+":"+nc+":"+cnonce+":"+"auth:"+b
response = hashlib.md5(c.encode(encoding='utf-8')).hexdigest()
  1. 综合的代码实现:
import requests
import hashlib

res = requests.get(target ip)
nonce = res.headers['WWW-Authenticate'].rpartition('nonce="')[2][:-1]  #得到服务器返回的nonce值
a = hashlib.md5('admin:_00:admin'.encode(encoding='utf-8')).hexdigest()
b = hashlib.md5('GET:/'.encode(encoding='utf-8')).hexdigest()
nc = '00000001'
cnonce = '7d5f2832dfac6bb48b36fd841165be41'
c = a+":"+nonce+":"+nc+":"+cnonce+":"+"auth:"+b
response = hashlib.md5(c.encode(encoding='utf-8')).hexdigest()  #计算应该发送的response
 
url = target url
headers = {
    **************
    "Authorization":"Digest username='admin',realm='_00',nonce='"+nonce+"',uri=taget url,cnonce='7d5f2832dfac6bb48b36fd841165be41',nc=00000001,response='"+response+"',qop='auth'"
    }

data = {
    ***********
    }

res = requests.post(url,headers=headers,data=data)
print(res)

相关文章

  • 快速理解JWT(JWS/JWE)认证并在Python中实现

    JWT,即Json Web Token认证机制,常用于web会话认证,对比传统的Session认证而言,它的优势很...

  • 身份验证

    目前比较成熟的Web服务认证方式有HTTP认证、自定义认证、采用现有工具包。利用Web服务可以建立面向服务的架构(...

  • web认证

    关于我正在做的路由器的web认证方式是这样的: 客户端首先向服务器发送一条不带认证的get。 服务器返回 Auth...

  • 思科ISE 对公司访客进行Portal 认证(基于HTTPS 协

    Portal 认证简介 Portal认证通常也称为Web认证,用户接入网络时,必须在门户网站进行认证,如果未认证成...

  • nodejs 收藏文章

    nodejs token Oauth认证 Oauth 认证-JWT 在Nodejs中使用JSON WEB Toke...

  • Spring Security学习笔记

    Spring Web Security是Java web开发领域的一个认证(Authentication)/授权(...

  • Web 授权与认证

    Web 授权与认证 实验内容 1. 简述 web.xml 中 listener, filter, servlet ...

  • 什么是portal 认证 (转)

    PORTAL概述 Portal在英语中是入口的意思。Portal认证通常也称为Web认证,一般将Portal认证网...

  • JWT认证原理分析

    基于session的认证 JWT认证规则 JWT(Json Web Token) JWT原理 签发算法 校验算法 ...

  • JWT 认证机制解析.md

    JWT 介绍 什么是JWTJSON WEB TOKEN认证机制原理结构 注意点 JWT: JSON WEB TOK...

网友评论

      本文标题:web认证

      本文链接:https://www.haomeiwen.com/subject/sxecdftx.html