• asp.net digest 摘要认证过程


    最近在调试一款门禁产品,门禁产品使用的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"

  • 相关阅读:
    开发中的报错问题
    vue2.0入门
    nodejs的一些基操
    git
    es6模块化规范
    js面向对象的笼统介绍
    this指向问题(改变它的指向)
    js面向对象杂谈
    原生js贪吃蛇
    bootstrap基础自我总结
  • 原文地址:https://www.cnblogs.com/qiejinxing/p/13588579.html
Copyright © 2020-2023  润新知