Envie uma solicitação HTTP de outro endereço IP em .net Core

0
Voto

Contexto

Contexto

Atualmente, estou trabalhando em uma API .net Core 3.1 que tem um método de autenticação que verifica se uma solicitação HTTP é enviada de um endereço IP específico. O endereço IP do solicitante deve corresponder àquele armazenado no banco de dados ou localhost, caso contrário, o cliente será negado.

Atualmente, estou trabalhando em uma API .net Core 3.1 que tem um método de autenticação que verifica se uma solicitação HTTP é enviada de um endereço IP específico. O endereço IP do solicitante deve corresponder aos que estão armazenados no banco de dados ou localhost, caso contrário, o cliente será negado.

Código

Código

Tenho o seguinte código:

Tenho o seguinte código:

<✓ControllerControladorControlador

 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 (solicitação[FromBody] AuthPlanbordRequest) { if (request.AuthType==AuthType.Planbord) { // Valide o endereço IP do cliente para verificar se a solicitação é feita do servidor do 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)); retornar Ok (novo ServerResponse (TokenGenerator.GenerateJsonWebToken (AuthResponse))); } return BadRequest (new ServerResponse (false, _localizer["AuthTypeNotSupported"], HttpStatusCode.BadRequest)); }

Serviço de autenticação

Serviço de autenticaçãoServiço de autenticação
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 TarefaAuthenticatePlanbordAsync (string ip, string databaseName, Guid userId=padrão) { _unitOfWork.Init (); // Verifique se a solicitação não se origina de localhost if (ip!=":: 1") { var Ip=await _unitOfWork.Connection.ExecuteScalarAsync("SELECT IpAdres FROM PlanbordAutorisaties WITH (NOLOCK) WHERE [email protected]", novo {Ip=ip}, _unitOfWork.Transaction); if (string.IsNullOrEmpty (Ip)) retorna nulo; } var userData=await _unitOfWork.AuthRepository.AuthenticatePlanbordAsync (userId); userData.IPAdress=ip; userData.DatabaseName=databaseName; return userData; }

Problema & Questão

Problema e Questão

Para testar totalmente se a lógica funciona, gostaria de escrever um teste de integração que envie uma solicitação HTTP de um endereço IP diferente do localhost. Isso seria possível no .net Core? Ou devo confiar apenas em testes de unidade?

Para testar totalmente se a lógica funciona, gostaria de escrever um teste de integração que envie uma solicitação HTTP de um endereço IP diferente do localhost. Isso seria possível no .net Core? Ou devo confiar apenas em testes de unidade?

Fonte

ip c# http core .net

1 -John

-Joep Verhoeven

2 Respostas
2
Votos

A maneira mais fácil (que funciona em qualquer idioma) é usar um serviço como o reqbin ou semelhante para simular uma solicitação. Por ser um serviço online terá um IP diferente.

Você pode encontrar outros serviços semelhantes fazendo isso. Este em particular também tem exemplos de API disponíveis. Então, se você quiser integrá-lo aos seus testes de unidade ou algo parecido, você só terá que simular uma solicitação POST para sua API, com os parâmetros apontando para seu endpoint para que você possa simular uma solicitação externa de um IP não incluído na lista de permissões.

Fonte

-Joep Verhoeven

-Liquid Core

-Joep Verhoeven

-Liquid Core

-Joep Verhoeven

0
Voto

Sim, se esta for uma chamada de API, você pode criar uma solicitação usando o cliente HTTP.

Você pode configurar o cliente HTTP para usar um proxy no manipulador.

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

Se esta for uma ação do site, você pode configurar seu navegador para usar um proxy ou simplesmente se conectar a uma VPN?

Fonte

1 -Liquid Core

Você pode interessar

© 2021   OlaMundo.Org