首页 > 其他分享 >HTTP摘要认证方式注册

HTTP摘要认证方式注册

时间:2023-04-13 16:12:08浏览次数:36  
标签:nonce HTTP String qop 摘要 认证 part realm response

 

 

HttpHeaders headers = new HttpHeaders();
//设置header,此处省略
HttpEntity<Object> entity = new HttpEntity<>("此处放你携带的参数", headers);
ResponseEntity<String> response = restTemplate.postForEntity(serverUrl + "/API/Register", entity, String.class);
if (response.getStatusCode() == HttpStatus.UNAUTHORIZED) {
  List<String> authorizationHeader = response.getHeaders().get("WWW-Authenticate");
  String authHeader = authorizationHeader.get(0);
  //重新设置请求头
  headers.set("Authorization", getHeader(authHeader));
  entity = new HttpEntity<>(object, headers);
  response = restTemplate.postForEntity(serverUrl + "/API/Register", entity, String.class);
  if (response.getStatusCode() == HttpStatus.OK){
    //此处写你的方法
  }
}

//getHeader方法如下, 此处要根据接收方返回的认证机制选择方法,此处是Digest
public static String getHeader(String authHeader){
String[] parts = authHeader.split(",\\s*");

String realm = null;
String qop = null;
String nonce = null;
  //从接收方返回的参数中分离出realm, qop, nonce
for (String part : parts) {
if (part.startsWith("Digest realm=")) {
realm = part.substring("Digest realm=".length()).replace("\"", "");
} else if (part.startsWith("qop=")) {
qop = part.substring("qop=".length()).replace("\"", "");
} else if (part.startsWith("nonce=")) {
nonce = part.substring("nonce=".length()).replace("\"", "");
}
}
String uri = "/API/Register";
  //md5进行加密,分两步
String ha1 = DigestUtils.md5Hex(username + ":" + realm + ":" + password);
String ha2 = DigestUtils.md5Hex("POST:"+uri);

String nc = "00000001";
String cnonce = CnonceGenerator.generateCnonce(); // 获取客户端随机数的方法略
String response = DigestUtils.md5Hex(
ha1 + ":" + nonce + ":" + nc + ":" + cnonce + ":" + qop + ":" + ha2);

String result = String.format("Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", " +
"qop=\"%s\", nc=\"%s\", cnonce=\"%s\", response=\"%s\"", username, realm, nonce, uri,
qop, nc, cnonce, response);
return result;
}

Digest的优点:

  1. 不适应明文传输密码
  2. 防止恶意的重放攻击
  3. 防止对报文内容的篡改

标签:nonce,HTTP,String,qop,摘要,认证,part,realm,response
From: https://www.cnblogs.com/zmh-980509/p/17315173.html

相关文章

  • HttpServeletRequest与RequestContextHolder.getRequestAttributes.getRequest的区别
    HttpServletRequest是JavaServletAPI中的一个接口,它提供了访问HTTP请求的方法,例如获取请求参数、请求头、请求体等。它是在Servlet容器中处理HTTP请求时创建的,并在Servlet的doGet()、doPost()等方法中作为参数传递。RequestContextHolder.getRequestAttributes().getRequest......
  • HTTP缓存机制详解
    目录什么是HTTP缓存缓存策略强制缓存ExpiresCache-Control对比缓存Last-Modified/If-Modified-SinceEtag/If-None-Match(优先级高于Last-Modified/If-Modified-Since)优先级Nginx缓存配置默认设置显示设置浏览器缓存策略总结什么是HTTP缓存HTTP缓存可以说是HTTP性......
  • elasticsearch认证
    【转载https://www.cnblogs.com/gavinYang/p/11199699.html】elasticsearchshield(5.0以下版本权限认证)elasticsearch5.0以下的版本要用到权限控制的话需要使用shield。下载地址:https://www.elastic.co/downloads/shield5.0以上的版本则可以使用X-Pack,shield现在只是x-pac......
  • DCMM数据管理能力成熟度认证
    DCMM数据管理能力1、DCMM等级数据管理能力的成熟度分为了5个等级,分别是初始级、受管理级、稳健级、量化管理级和优化级。DCMM分别从8大过程能力领域中的28个过程能力项出发,对每个过程能力项的过程描述、过程目标、能力等级标准进行评估,形成了445个能力指标,通过对每一个能力指标进行......
  • HTTP协议和MQTT协议对比谁更好
    HTTP协议是Web联网的基础,也是应用最为广泛和流行的协议,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。MQTT是一种基于发布/订阅模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IB......
  • java发送Http请求
    使用java11添加的HttpClient新API发送Http(Https)请求HTTP客户端是在Java11中添加的。它可以用于通过网络请求HTTP资源。它支持HTTP/1.1和HTTP/2(同步和异步编程模型),将请求和响应主体作为反应流处理,并遵循熟悉的构建器模式。参考文章:https://blog.csdn.net/allway2/articl......
  • C#请求访问HTTP+JSON数据的解析
    一、前言最近工作客户需要一个HTTP的Mes需求,所以自己去学习了C#请求HTTP的方法以及JSON数据的解析方法,总结出了点经验,以便后续自己找起来方便一点,故在此写一篇文章。二、准备工作下面我用一个聚合数据提供的天气预报API接口来阐述请求HTTP和JSON数据解析的功能;先看API文档这么访......
  • C#中HttpWebRequest的用法详解
    1、HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。2、命名空间:System.Net3、HttpWebRequest对象不是利用new关键字创建的(通过构造函数)。 而是利用Create()方法创建的。4、你可能预计需要显示地调用一个“Send”方法,实际上不需要。5、调用HttpWebRe......
  • 在.NET Core使用 HttpClient 的正确方式
    前言HttpClient是.NETFramework、.NETCore或.NET5以上版本中的一个类,用于向WebAPI发送HTTP请求并接收响应。它提供了一些简单易用的方法,如GET、POST、PUT和DELETE,可以很容易地构造和发送HTTP请求,并处理响应数据。它是我们比较常用的官方HTTP请求组件,那么你们都......
  • HttpHelper
    publicclassHttpHelpe{publicstaticasyncTask<T>GetAsync<T>(stringurl,stringpostData=null,stringcontentType=null,inttimeOut=30,Dictionary<string,string>headers=null){returnawaitRequestAsync<T......