基于Basic auth 的一个C# 示例
最近在做公司的一个项目时,客户需要我们定时获取他们矩阵系统的数据。在与客户进行对接时,提到他们的接口使用的目前不常用的BASIC 认证。天呢,它好不安全,容易被不法人监听,咋还在使用呀。但是没办法呀,谁让客户的系统就是这样的呢。因为现在开发中绝大多数使用的是基于Bearer 认证的。
1、研究
1.Basic auth是在HTTP 1.0提出的,是一种较为简单的HTTP认证方式,客户端通过明文 (Base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全。
3.若是未认证,服务器则会像客户端返回401 UNAUTHORIZED;如果客户端是浏览器,收到401后会弹出对话框要求输入用户名及密码
4.输入的用户名和密码会按照**username:password**的格式拼接后用base64编码,填入请求报文头部的**Authorization**域,如**Basic bWFyczpsb28=**。如果输入的是错误的用户名和密码,服务器会反复提示输入用户名和密码,直至输入正确或用户点击取消按钮放弃认证。如果输入的是正确的用户名及密码,浏览器返回认证通过后的页面。
5. 由于base64编码本身是可逆的过程,所以如果有中间人截获报文后,通过重放攻击即可获取正确授权。
2、一个C#示例
步骤一
/// <summary>
/// 最终调用方法
/// </summary>
/// <param name="param">查询条件</param>
/// <param name="urlAddress">访问地址URL</param>
/// <param name="userName">用户名</param>
/// <param name="userPassword">密码</param>
/// <returns></returns>
public async Task<string> Basic_PostAsync(string param,string urlAddress,string userName,string userPassword)
{
string responseString = string.Empty;
try
{
// 创建HttpWebRequest对象
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(urlAddress);
_logger.Warn($"入参数据:{param}");
//_logger.Warn($"矩阵系统地址:{_options.UrlAddress}");
// 设置Post调⽤⽅法
httpRequest.Method = "Post";
//设置参数传输类型
httpRequest.ContentType = " application/json; charset=utf-8";//"application/x-www-form-urlencoded;charset=utf-8";;;;application/json
// 设置Http Basic认证的请求头
string base64 = GetEncodedCredentials(userName, userPassword);
httpRequest.Headers.Add("Authorization", "Basic " + base64);
//传输参数格式转换
byte[] bytesRequestData = Encoding.UTF8.GetBytes(param);
//_logger.Warn($"入参数据格式转换:{bytesRequestData}");
httpRequest.ContentLength = bytesRequestData.Length;
Stream postStream = await httpRequest.GetRequestStreamAsync();
postStream.Write(bytesRequestData, 0, bytesRequestData.Length);
postStream.Close();
//获取设置身份认证及请求超时时间
SetWebRequest(httpRequest);
// HttpWebRequest发起调⽤
using (HttpWebResponse myResponse = (HttpWebResponse)httpRequest.GetResponse())
{
// StreamReader对象
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
// 返回结果
responseString = sr.ReadToEnd();
_logger.Warn($"调用矩阵系统返回结果:{responseString}");
return responseString;
}
}
catch (Exception ex)
{
//返回错误信息
responseString = ex.ToString();
}
return responseString;
}
步骤二
/// <summary>
/// 转换string
/// </summary>
/// <param name="userName"></param>
/// <param name="passwordName"></param>
/// <returns></returns>
private string GetEncodedCredentials(string userName, string passwordName)
{
string mergedCredentials = string.Format("{0}:{1}", userName, passwordName);
byte[] byteCredentials = UTF8Encoding.UTF8.GetBytes(mergedCredentials);
return Convert.ToBase64String(byteCredentials);
}
步骤三
/// <summary>
/// 获取设置身份认证及请求超时时间
/// </summary>
/// <param name="request"></param>
private static void SetWebRequest(HttpWebRequest request)
{
request.Credentials = CredentialCache.DefaultCredentials;
request.Timeout = 1000000;
}
基于Basic auth 的一个C# 示例的更多相关文章
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- Basic Auth攻击
1.Basic Auth认证简介 Basic身份认证,是HTTP 1.0中引入的认证方案之一.虽然方案比较古老,同时存在安全缺陷,但由于实现简单,至今仍有不少网站在使用它. 例如Apche Tomca ...
- 基于 Traefik 的 Basic Auth 配置
前言 Traefik是一个现代的HTTP反向代理和负载均衡器,使部署微服务变得容易. Traefik可以与现有的多种基础设施组件(Docker.Swarm模式.Kubernetes.Marathon. ...
- eShopOnContainers 是一个基于微服务的.NET Core示例框架
找到一个好的示例框架很难,但不是不可能.大多数是小型Todo风格的应用程序,通常基于SimpleCRUD.值得庆幸的是,Microsoft已经为eShopOnContainers创建了一个基于微服务的 ...
- 使用crypt配置Basic Auth登录认证
简介 Basic Auth用于服务端简单的登录认证,通常使用服务器Nginx.Apache本身即可完成.比如我们要限定某个域名或者页面必须输入用户名.密码才能登录,但又不想使用后端开发语言,此时Bas ...
- Etcd安全配置之Basic Auth认证
<中小团队落地配置中心详解>文章中我们介绍了如何基于Etcd+Confd构建配置中心,最后提到Etcd的安全问题时说了可以使用账号密码认证以达到安全访问的目的,究竟该如何开启认证以及怎么设 ...
- SpringBoot + CXF快速实现SOAP WebService(支持Basic Auth)
唠叨两句 讲真,SOAP跟现在流行的RESTful WebService比起来显得很难用.冗余的XML文本信息太多,可读性差,它的请求信息有时很难手动构造,不太好调试.不过说归说,对某些企业用户来说S ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- WCF学习之旅——第一个WCF示例(一)
最近需要用到WCF,所以对WCF进行了解.在实践中学习新知识是最快的,接下来先做了一个简单的WCF服用应用示例. 本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些 ...
- WCF学习之旅——第一个WCF示例(三)
第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...
随机推荐
- 火山引擎 DataTester:0 代码也能实施 A/B 测试的实验平台
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 近日,火山引擎 DataTester 对 A/B 实验"可视化编辑器"进行了升级,可视化编辑器功能让用 ...
- Windows 2016 安装 Jenkins
Docker Jenkins 安装配置 Windows 2016 安装 Jenkins Jenkins + SVN Jenkins + SVN/Git + Maven + Docker + 阿里云镜像 ...
- AliSSR 语音超分算法:让在线会议语音更明亮更自然
超分让在线会议语音更明亮,在线会议已成为日常工作中较为普遍的沟通交流方式,接入会议的方式也呈现多样化,比如电脑入会.手机入会又或是电话入会. 雪雅.曜辰|作者 众所周知,高采样率且高带宽的音频信号富含 ...
- 【3rd Party】nlohmann json 基础用法
参考链接:Here 什么是nlohman json ? nlohman json GitHub - nlohmann/json: JSON for Modern C++ 是一个为现代C++(C++11 ...
- 2016年第七届 蓝桥杯A组 C/C++决赛题解
蓝桥杯历年国赛真题汇总:Here 1.随意组合 小明被绑架到X星球的巫师W那里. 其时,W正在玩弄两组数据 (2 3 5 8) 和 (1 4 6 7) 他命令小明从一组数据中分别取数与另一组中的数配对 ...
- idea调式技巧汇总
调式进阶1: https://blog.csdn.net/future_god_qr/article/details/121250865 调式进阶2:(evaluate用法:)快捷键:alt+f8 ...
- 7、SpringBoot-mybatis-plus引入
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- configmap 和 secret 概述
本篇文章是对 configmap 和 secret 的一个总结,详细信息可看 这里 1. configmap 和 secret 概述 在 container 的 image 中可通过 ENTRYPOI ...
- 到底什么样的 Java 项目用 Solon 好???
什么样的 Java 项目用 Solon 好 就像华为讲的,不要因为爱国而特意买华为手机.Solon 也是,有需要就用不需要就跳过(按正常的需求选择): 信创需要国产化,应该用 Solon 或者 Sol ...
- 调整PR界面字体大小
1.问题 界面字体太大或者太小,看得不舒服 2.解决问题 按住ctrl+F12,调出如下工作台 选择Debug Datatbase View 其中找到AdobeCleanFontSize,并修改 重启 ...