C#模拟http请求增加验证auth

本文介绍了一种在Elasticsearch中实现权限验证的方法,通过修改PlainElastic.Net组件源码来支持基本认证,将用户名和密码编码并放入HTTP头部。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适用post put 请求

最背景:近单位用elasticsearch升级从2.4X升级到5.X,增加了auth的权限验证。使用的PlainElastic.Net组件,该组件源码支持权限有问题,下载了源码更改了下。

本质是把用户名和密码放到了head里。

authString =“用户名:密码@127.0.0.1”;

 string authUrl = url.Replace("http://","");
            string authString = authUrl.Substring(0, authUrl.LastIndexOf("@"));

            if (!string.IsNullOrWhiteSpace(authString))
            {
                var array = authString.Split(':');               
                string  userName = array[0];
                string password = array[1];
                string encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes($"{userName}:{password}"));
                request.Headers.Add("Authorization", $"Basic {encoded}");
            }

或者

WebRequest request = WebRequest.Create(url);
request.Credentials = GetCredential();
request.PreAuthenticate = true;

private CredentialCache GetCredential(string url)
{

    string authUrl = url.Replace("http://","");
    string authString = authUrl.Substring(0, authUrl.LastIndexOf("@"));

    string  userName = array[0];
    string  password = array[1];

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
    CredentialCache credentialCache = new CredentialCache();
    credentialCache.Add(new System.Uri(url), "Basic", new NetworkCredential(userName, password ));
    return credentialCache;
}

参考:https://stackoverflow.com/questions/4334521/httpwebrequest-using-basic-authentication

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值