惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
U
Unit 42
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
F
Full Disclosure
月光博客
月光博客
Engineering at Meta
Engineering at Meta
博客园_首页
The Register - Security
The Register - Security
G
Google Developers Blog
The Cloudflare Blog
博客园 - Franky
K
Kaspersky official blog
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cisco Blogs
Hugging Face - Blog
Hugging Face - Blog
C
Check Point Blog
NISL@THU
NISL@THU
AI
AI
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Vercel News
Vercel News
T
Tor Project blog
P
Privacy International News Feed
D
Docker
I
Intezer
L
LangChain Blog
P
Proofpoint News Feed
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
博客园 - 聂微东
AWS News Blog
AWS News Blog
Martin Fowler
Martin Fowler
P
Privacy & Cybersecurity Law Blog
V
V2EX
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
The Hacker News
The Hacker News
T
Tenable Blog
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog

博客园 - 风雨行者

使用 Qjx.CustomCache 在接口进行AOP 数据缓存 asp.net core 基于autofac 实现AOP 拦截 之 第三种方式 -基于class asp.net core 基于autofac 实现AOP 拦截 之 第二种方式 -基于class asp.net core 3.1 应用Aufac 进行AOP 的三种方式1 基于接口AOP linux之 tomcat 安装配置入门 linux的nginx的安装以及负载均衡 linux 系统管理 linux 服务管理 redis主从复制 读写分离 Redis 集群部署之Redis 安装(1) hbuilder 运行在 android 模拟器中 转载:Spring Boot 不使用默认的 parent,改用自己的项目的 paren .NET Core CLI 的性能诊断介绍 转载学习:windows下将ES和kibana作为服务启动 转(以作记录):cmd命令行---进行Windows服务操作 在 .NET Core 中使用 Diagnostics MyEclipse 使用外部tomcat 调试springboot Git与GitHub 学习笔记 dropdownlist 支持键盘拼音定位选择
asp.net digest 摘要认证过程
风雨行者 · 2020-08-31 · via 博客园 - 风雨行者

最近在调试一款门禁产品,门禁产品使用的digest 认证

摘要认证的关键是加密算法过程,客户端根据服务器返回的信息+自己的用户名和密码信息,进行本地加密,然后发送加密后的摘要信息到服务器,服务器根据用户传递的信息进行验证,验证通过则代表有权限

访问过程如下

(1)对于需要认证的HTTP交互,客户端在提交HTTP请求后,服务端会返回401 Unauthorized的应答,

 并且头部包含WWW-Authenticate项,表示客户端需要提供认证信息. HTTP头部的WWW-Authenticate项示例如下.

WWW-Authenticate: Digest realm="webserver", domain="::", qop="auth", nonce="ZmFkODI1Y2ZmZTQwYTM3MDJhZTRmMWI1ZWE5NTRiZWY6d2Vic2VydmVyOjVkZDQwODg3OjExNw==", opaque="5ccc069c403ebaf9f0171e9517f40e41", algorithm="MD5", stale="FALSE"

(2)客服端根据返回的header数据进行本地加密

string realm = "webserver";
string nonce = "ZmFkODI1Y2ZmZTQwYTM3MDJhZTRmMWI1ZWE5NTRiZWY6d2Vic2VydmVyOjVkZDQwODg3OjExOQ==";
string uri = "digest/frmDstPara";
string nonceCount = "00000002";
string clientNonce = "...";
string response = "";
string HA1 = MD5Str("admin:" + realm + ":asdfghjkl123").tolower();
string HA2 = MD5Str("POST:" + uri).tolower();
string s2= String.Format("{0}:{1}:{2}:{3}:{4}:{5}", HA1, nonce, nonceCount, clientNonce, "auth", HA2);
response = MD5Str(s2).tolower(); ;

其中需要注意的是HA1 和HA2和 respoinse一定要转换为小写,否则对于标准的digest 认证可能通过不了

这里的clientNonce 为客户端生成的nonce值

而nonceCount 用于统计,假设开始时为00000001,下次请求后就变成了00000002,不一定每次都加1,但是后面请求中的nc值肯定大于前一次请求中的nc值。

(3)提交请求,服务器会在header里查找 Authorization 并进行和客户端一样的加密过程,对比response是否一致,一致的话,则返回200

在header 里添加 Authorization 

Authorization: Digest username="admin", realm="webserver", nonce="ZmFkODI1Y2ZmZTQwYTM3MDJhZTRmMWI1ZWE5NTRiZWY6d2Vic2VydmVyOjVkZDQwODg3OjExOQ==", uri="digest/frmDstPara", response="f84a841fef42be86c925b346324eba77", opaque="5ccc069c403ebaf9f0171e9517f40e41", qop=auth, nc=00000002, cnonce="dff275c9dd027985"