Invia una richiesta HTTP da un altro indirizzo IP in .net Core

0
Vote

Contesto

Contesto

Attualmente sto lavorando su un'API .net Core 3.1 che ha un metodo di autenticazione che controlla se una richiesta HTTP viene inviata da uno specifico indirizzo IP. L'indirizzo IP del richiedente deve corrispondere a quelli memorizzati nel database o nell'host locale altrimenti il ​​client viene negato.

Attualmente sto lavorando su un'API .net Core 3.1 che ha un metodo di autenticazione che controlla se viene inviata una richiesta HTTP da uno specifico indirizzo IP. L'indirizzo IP del richiedente deve corrispondere a quelli archiviati nel database o nell'host locale, altrimenti il ​​client viene negato.

Codice

Codice

Ho il seguente codice:

Ho il seguente codice:

<$ControllerControllerController

 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] AuthPlanbordRequest request) { if (request.AuthType==AuthType.Planbord) { // Convalida l'indirizzo IP del client per verificare se la richiesta viene effettuata dal server di planbord. var ip=_accessor.HttpContext? .Connection? .RemoteIpAddress? .ToString (); var AuthResponse=await _authService.AuthenticatePlanbordAsync (ip, request.DatabaseName, request.UserId); if (AuthResponse==null) restituisce Unauthorized (new ServerResponse (false,"Unauthorized", HttpStatusCode.Unauthorized)); return Ok (new ServerResponse (TokenGenerator.GenerateJsonWebToken (AuthResponse))); } return BadRequest (new ServerResponse (false, _localizer["AuthTypeNotSupported"], HttpStatusCode.BadRequest)); }

Servizio di autenticazione

Servizio di autenticazioneServizio di autenticazione
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 (); // Controlla se la richiesta non proviene da localhost if (ip!=":: 1") { var Ip=await _unitOfWork.Connection.ExecuteScalarAsync("SELECT IpAdres FROM PlanbordAutorisaties WITH (NOLOCK) WHERE [email protected]", new {Ip=ip}, _OfWork.Transaction); if (string.IsNullOrEmpty (Ip)) restituisce null; } var userData=await _unitOfWork.AuthRepository.AuthenticatePlanbordAsync (userId); userData.IPAdress=ip; userData.DatabaseName=databaseName; return userData; }

Problema & Domanda

Problema e domanda

Per verificare completamente se la logica funziona, vorrei scrivere un test di integrazione che invia una richiesta HTTP da un indirizzo IP diverso da localhost. Questo sarebbe possibile in .net Core? O dovrei fare affidamento solo sugli unit test?

Per verificare completamente se la logica funziona, vorrei scrivere un test di integrazione che invia una richiesta HTTP da un indirizzo IP diverso da localhost. Questo sarebbe possibile in .net Core? O dovrei fare affidamento solo sui test unitari?

Source

ip c# http core .net

1 -John

-Joep Verhoeven

2 Answers
2
Votes

Il modo più semplice (che funziona in qualsiasi lingua), è usare un servizio come reqbin o simile per simulare una richiesta. Essendo un servizio online avrà un IP diverso.

Puoi trovare altri servizi simili che lo fanno. Questo in particolare ha anche un esempi di API disponibili. Quindi, se vuoi integrarlo ai tuoi unit test o qualcosa di simile, dovrai solo simulare una richiesta POST alla loro API, con i parametri che puntano al tuo endpoint in modo da poter simulare una richiesta esterna da un IP non autorizzato.

Source

-Joep Verhoeven

-Liquid Core

-Joep Verhoeven

-Liquid Core

-Joep Verhoeven

0
Vote

Sì, se questa è una chiamata API puoi creare una richiesta utilizzando il client HTTP.

Puoi impostare il client HTTP per utilizzare un proxy nel gestore.

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

Se si tratta di un'azione del sito Web, puoi impostare il browser in modo che utilizzi un proxy o semplicemente connetterti a una VPN?

Source

1 -Liquid Core

Potreste essere interessati

© 2021   Risposta.org