【HTTP】摘要认证 Digest access authentication

第三方接口对接:摘要认证 Digest access authentication

HTTP认证方式:
		BASIC 认证(基本认证);
		DIGEST 认证(摘要认证);
		SSL 客户端认证;
		FormBase 认证(基于表单认证);

1、摘要认证流程:
在这里插入图片描述
(1) 服务器计算出一个随机数。

(2) 服务器将这个随机数放在 WWW-Authenticate 质询报文中,与服务器所支持的算法列表一同发往客户端。

(3) 客户端选择一个算法,计算出密码和其他数据的摘要。

(4) 客户端将摘要放在一条 Authorization 报文中发回服务器。如果客户端要对服务器进行认证,可以发送客户端随机数。

(5) 服务器接收摘要、选中的算法以及支撑数据,计算出与客户端相同的摘要。然后服务器将本地生成的摘要与网络传送过来的摘要进行比较,验证是否匹配。如果客户端反过来用客户端随机数对服务器进行质询,就会创建客户端摘要。服务器可以预先将下一个随机数计算出来,提前将其传递给客户端,这样下一次客户端就可以预先发送正确的摘要了。

2、算法参考:网上一大堆
3、摘要认证Client的简单实现:

        // 账户密码认证
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
                new UsernamePasswordCredentials("用户名", "密码");
        SSLConnectionSocketFactory sslConnectionSocketFactory;
        try {
            // 忽略SSL证书校验
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (chain, authType) -> true).build();
            sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext);
        } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
            log.error("获取验证账户密码的Digest客户端:失败");
            throw new RmtCallUnHandleException("获取验证账户密码的Digest客户端:失败");
        }
        // config等其他未配置:返回认证的HttpClint对象
        return HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).setSSLSocketFactory(sslConnectionSocketFactory).build();

记录一次工作上遇到的坑,,新手,,大佬勿喷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值