首页 > 编程语言 >基于Basic auth 的一个C# 示例

基于Basic auth 的一个C# 示例

时间:2024-01-28 20:24:23浏览次数:27  
标签:httpRequest responseString 用户名 string 示例 C# auth 认证 Basic

最近在做公司的一个项目时,客户需要我们定时获取他们矩阵系统的数据。在与客户进行对接时,提到他们的接口使用的目前不常用的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;

        }

标签:httpRequest,responseString,用户名,string,示例,C#,auth,认证,Basic
From: https://www.cnblogs.com/moonstars/p/17993139

相关文章

  • Misc( 10 )
    我吃三明治可以用binwalk分离出一张图片将这张图片用010打开,可以看见以下内容看见以上内容是base32(A-Z,2-7)用在线工具即可得到flagflag{6f1797d4080b29b64da5897780463e30}从娃娃抓起上面的是中文电码查询,下面的是五笔http://life.chacuo.net/convertwubi最后结果......
  • Codeforces Round 920 (Div. 3)
    A-Square难度:⭐题目大意给定正方形的四个顶点,求该正方形的面积;解题思路根据四个点找出长和宽即可,因为数据范围有负数,为了方便我都进行了移位;神秘代码#include<bits/stdc++.h>#defineintlonglong#defineIOSios::sync_with_stdio(false);cin.tie(0......
  • SQLServer和Oracle常用函数对比
      1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select flo......
  • THUWC2024 游记
    Day01月25号下午从一中出发,一号线换乘二号线到黄花园站,然后走到了巴蜀本部。在签到处领到了一个包,后来发现里面有一本《图解人工智能》的科普书,一只鼠标和一支数控笔,作为第一次参加线下冬令营的菜鸡,表示很惊喜。下午唯一美中不足的是饭票25元/张,只能说不愧是巴蜀。晚上吃......
  • 《程序是怎样跑起来的》第1章 对程序员来说CPU是什么?
    CPU是什么,CPU是指(CentralProcessingUnit)中文名称为中央处理器,正如同它的名字一样,它是整个计算机的核心,是计算机的灵魂所在;它对于计算机如同大脑对于人类。任何计算机发出的指令都要经过CPU。所以对程序员来说CPU是秘书,是管家,是力量,是武器,是枪里面的子弹。从功能上来看CPU的内部......
  • 对程序员来说CPU是什么
    第一章中,作者以问问题开始,为我们详细解释了什么是CPU。对于许多人来说,CPU可能是相对抽象的,但在第一章中,作者将其拆解开来,让我们看到了其真正的运作机制。这其中,这本书也成为了我们了解CPU的重要工具。作者深入讲解CPU的核心部分,在这一部分中,作者详细地解释了CPU是如何被编译和......
  • THUWC 2024 游记
    其实这个游记也没啥好写的……day0上午做动车两个小时到重庆,路上玩了1.5h的星露谷。下午去巴蜀中学报道试机,系统是UbuntuJammy,大大的好评,只是桌面是Xubuntu/Xfce,不太喜欢。键盘感觉太柔了,容易按不上键,不过影响不大。试机题三道,A+B,构造,交互。比较简单,口胡了做法,写了前......
  • 对程序员来说CPU是什么
    只有一行的有用程序是很少见的,机械语言也是如此。当执行的指令占据多个内存地址时,就会增加与指令长度相应的数值,然后,CPU的控制器就会参照程序计数器的数值,从内存中读取命令并执行。也就是说,程序计数器决定着程序的流程。程序分为顺序执行、条件分支和循环三种。顺序执行是指按照......
  • 2021-2022 ICPC Southwestern European Regional Contest (SWERC 2021-2022)
    Preface这场打的也挺好的,前中期稳定出题,后期还和徐神接力写了一个K最后乱猜还猜对了H题的结论,可惜因为常数以及三分的bound等问题赛事没过最后10题舒服下班A.OrganizingSWERC签到,话说外国场的A基本都是签到啊#include<cstdio>#include<iostream>#defineRIregisterin......
  • 探寻CPU的奥秘
    CPU,即中央处理器,被誉为计算机的心脏,是计算机运行的核心部件。它的存在使得计算机可以执行复杂的任务,从简单的计算到复杂的图像处理,从文字编辑到游戏模拟,无所不能。然而,尽管我们每天都在使用计算机,但我们对CPU的了解却并不多。今天,我们就一起来探寻CPU的奥秘。CPU的工作原......