Kirim permintaan HTTP dari alamat IP lain di .net Core

0
Pilih

Konteks

Konteks

Saat ini saya mengerjakan .net Core 3.1 API yang memiliki metode otentikasi yang memeriksa apakah permintaan HTTP dikirim dari alamat IP tertentu. Alamat IP pemohon harus cocok dengan yang disimpan dalam database atau localhost, jika tidak, klien ditolak.

Saat ini saya mengerjakan .net Core 3.1 API yang memiliki metode otentikasi yang memeriksa apakah permintaan HTTP dikirim dari alamat IP tertentu. Alamat IP pemohon harus cocok dengan yang disimpan dalam database atau localhost jika klien ditolak.

Kode

Kode

Saya Memiliki kode berikut:

Saya Memiliki kode berikut:

  • PengontrolPengontrolPengontrol
     public async Task<IActionResult> AuthenticatePlanbord([FromBody] AuthPlanbordRequest request)
            {
                if (request.AuthType==AuthType.Planbord)
                {
                    // Validate the IP address of the client to check if the request is made from the server of the planbord.
                    var ip=_accessor.HttpContext?.Connection?.RemoteIpAddress?.ToString();
                    var AuthResponse=await _authService.AuthenticatePlanbordAsync(ip, request.DatabaseName, request.UserId);
                    if (AuthResponse==null) return Unauthorized(new ServerResponse(false,"Unauthorized", HttpStatusCode.Unauthorized));
                    return Ok(new ServerResponse(TokenGenerator.GenerateJsonWebToken(AuthResponse)));
                }
                return BadRequest(new ServerResponse(false, _localizer["AuthTypeNotSupported"], HttpStatusCode.BadRequest));
            }
    
    public async Task<IActionResult> AuthenticatePlanbord([FromBody] AuthPlanbordRequest request) { if (request.AuthType==AuthType.Planbord) { // Validate the IP address of the client to check if the request is made from the server of the planbord. var ip=_accessor.HttpContext?.Connection?.RemoteIpAddress?.ToString(); var AuthResponse=await _authService.AuthenticatePlanbordAsync(ip, request.DatabaseName, request.UserId); if (AuthResponse==null) return Unauthorized(new ServerResponse(false,"Unauthorized", HttpStatusCode.Unauthorized)); return Ok(new ServerResponse(TokenGenerator.GenerateJsonWebToken(AuthResponse))); } return BadRequest(new ServerResponse(false, _localizer["AuthTypeNotSupported"], HttpStatusCode.BadRequest)); } public async TaskAuthenticatePlanbord ([FromBody] permintaan AuthPlanbordRequest) { if (request.AuthType==AuthType.Planbord) { // Validasi alamat IP klien untuk memeriksa apakah permintaan dibuat dari server planbord. var ip=_accessor.HttpContext? .Connection? .RemoteIpAddress? .ToString (); var AuthResponse=menunggu _authService.AuthenticatePlanbordAsync (ip, request.DatabaseName, request.UserId); if (AuthResponse==null) return Unauthorized (baru ServerResponse (false,"Unauthorized", HttpStatusCode.Unauthorized)); kembali Ok (ServerResponse baru (TokenGenerator.GenerateJsonWebToken (AuthResponse))); } return BadRequest (baru ServerResponse (false, _localizer["AuthTypeNotSupported"], HttpStatusCode.BadRequest)); }

    Layanan otentikasi

    Layanan otentikasiLayanan otentikasi
    public async Task<AuthEntityPlanbord> AuthenticatePlanbordAsync(string ip, string databaseName, Guid userId=default)
            {
                _unitOfWork.Init();
                // Check if the request does not originate from localhost
                if (ip !="::1")
                {
                    var Ip=await _unitOfWork.Connection.ExecuteScalarAsync<string>("SELECT IpAdres FROM PlanbordAutorisaties WITH(NOLOCK) WHERE [email protected]", new { Ip=ip }, _unitOfWork.Transaction);
                    if (string.IsNullOrEmpty(Ip)) return null;
                }
                var userData=await _unitOfWork.AuthRepository.AuthenticatePlanbordAsync(userId);
                userData.IPAdress=ip;
                userData.DatabaseName=databaseName;
                return userData;
            }
    
    public async Task<AuthEntityPlanbord> AuthenticatePlanbordAsync(string ip, string databaseName, Guid userId=default) { _unitOfWork.Init(); // Check if the request does not originate from localhost if (ip !="::1") { var Ip=await _unitOfWork.Connection.ExecuteScalarAsync<string>("SELECT IpAdres FROM PlanbordAutorisaties WITH(NOLOCK) WHERE [email protected]", new { Ip=ip }, _unitOfWork.Transaction); if (string.IsNullOrEmpty(Ip)) return null; } var userData=await _unitOfWork.AuthRepository.AuthenticatePlanbordAsync(userId); userData.IPAdress=ip; userData.DatabaseName=databaseName; return userData; } public async TaskAuthenticatePlanbordAsync (string ip, string databaseName, Guid userId=default) { _unitOfWork.Init (); // Periksa apakah permintaan tidak berasal dari localhost if (ip!=":: 1") { var Ip=await _unitOfWork.Connection.ExecuteScalarAsync("SELECT IpAdres FROM PlanbordAutorisaties WITH (NOLOCK) WHERE [email protected]", new {Ip=ip}, _unitOfWork.Transaction); if (string.IsNullOrEmpty (Ip)) mengembalikan null; } var userData=menunggu _unitOfWork.AuthRepository.AuthenticatePlanbordAsync (userId); userData.IPAdress=ip; userData.DatabaseName=databaseName; return userData; }

    Masalah & Pertanyaan

    Masalah & Pertanyaan

    Untuk menguji sepenuhnya apakah logika berfungsi, saya ingin menulis tes integrasi yang mengirimkan permintaan HTTP dari alamat IP yang berbeda dari localhost. Apakah ini mungkin dilakukan dalam .net Core? Atau Haruskah saya hanya mengandalkan pengujian Unit saja?

    Untuk menguji sepenuhnya apakah logika berfungsi, saya ingin menulis pengujian integrasi yang mengirimkan permintaan HTTP dari alamat IP yang berbeda dari localhost. Apakah ini mungkin dilakukan dalam .net Core? Atau Haruskah saya hanya mengandalkan tes Unit saja?
  • Sumber

    ip c# http core .net

    1 -John

    -Joep Verhoeven

    2 Jawaban
    2
    Pemberian suara

    Cara mudah (yang berfungsi dalam bahasa apa pun), adalah menggunakan layanan seperti reqbin atau serupa untuk mensimulasikan permintaan. Sebagai layanan online, ia akan memiliki IP yang berbeda.

    Anda dapat menemukan layanan serupa lainnya yang melakukan itu. Yang ini khususnya juga memiliki contoh API yang tersedia. Jadi jika Anda ingin mengintegrasikannya ke pengujian unit atau semacamnya, Anda hanya perlu mensimulasikan permintaan POST ke api mereka, dengan parameter yang mengarah ke titik akhir Anda sehingga Anda dapat mensimulasikan permintaan eksternal dari IP yang tidak masuk daftar putih.

    Sumber

    -Joep Verhoeven

    -Liquid Core

    -Joep Verhoeven

    -Liquid Core

    -Joep Verhoeven

    0
    Pilih

    Ya, jika ini adalah panggilan API, Anda dapat membuat permintaan menggunakan klien HTTP.

    Anda dapat menyetel klien HTTP untuk menggunakan proxy di penangan.

    var httpclienthandler=new HttpClientHandler
                {
                    // Set creds in here too if your proxy needs auth
                    Proxy=new WebProxy("proxyIp")
                };
    var httpClient=new HttpClient(httpclienthandler);
    

    Jika ini adalah tindakan situs web, Anda dapat menyetel browser Anda untuk menggunakan proxy, atau cukup sambungkan ke VPN?

    Sumber

    1 -Liquid Core

    Anda Mungkin Menarik

    © 2021   Pemrograman.Net