.netCoreの別のIPアドレスからHTTPリクエストを送信します

0
投票

コンテキスト

コンテキスト

現在、HTTPリクエストが特定のIPアドレスから送信されているかどうかをチェックする認証方法を備えた.net Core 3.1APIに取り組んでいます。 リクエスターのIPアドレスは、データベースまたはローカルホストに保存されているものと一致する必要があります。一致しない場合、クライアントは拒否されます。

現在、HTTPリクエストが送信されているかどうかを確認する認証メソッドを持つ.net Core 3.1APIに取り組んでいます。特定のIPアドレスから。 リクエスターのIPアドレスは、データベースまたはローカルホストに保存されているものと一致する必要があります。一致しない場合、クライアントは拒否されます。

コード

コード

次のコードがあります:

次のコードがあります:

コントローラー

コントローラーコントローラー
 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) {{ //クライアントのIPアドレスを検証して、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)); Ok(new ServerResponse(TokenGenerator.GenerateJsonWebToken(AuthResponse)));を返します。 } BadRequest(new ServerResponse(false、_localizer["AuthTypeNotSupported"]、HttpStatusCode.BadRequest));を返します。 }

認証サービス

認証サービス認証サービス
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(); //リクエストがローカルホストから発信されていないかどうかを確認します 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))がnullを返す; } var userData=await _unitOfWork.AuthRepository.AuthenticatePlanbordAsync(userId); userData.IPAdress=ip; userData.DatabaseName=databaseName; userDataを返します。 }

問題&質問

問題と質問

ロジックが機能するかどうかを完全にテストするために、ローカルホストとは異なるIPアドレスからHTTPリクエストを送信する統合テストを作成したいと思います。これは.netCoreで可能でしょうか?または、単体テストのみに依存する必要がありますか?

ロジックが機能するかどうかを完全にテストするには、ローカルホストとは異なるIPアドレスからHTTPリクエストを送信する統合テストを作成します。これは.netCoreで可能でしょうか?または、ユニットテストのみに依存する必要がありますか?

ソース

ip c# http core .net

1 -John

-Joep Verhoeven

2 答え
2
投票

(どの言語でも機能する)簡単な方法は、ATAG-0のようなサービスを使用することです|または同様にリクエストをシミュレートします。オンラインサービスであるため、IPは異なります。

それを行っている他の同様のサービスを見つけることができます。 特にこれには、利用可能なAPIの例もあります。したがって、単体テストなどに統合する場合は、ホワイトリストに登録されていないIPからの外部リクエストをシミュレートできるように、エンドポイントを指すパラメーターを使用して、APIへのPOSTリクエストをシミュレートする必要があります。

ソース

-Joep Verhoeven

-Liquid Core

-Joep Verhoeven

-Liquid Core

-Joep Verhoeven

0
投票

はい、これがAPI呼び出しの場合は、HTTPクライアントを使用してリクエストを作成できます。

ハンドラーでプロキシを使用するようにHTTPクライアントを設定できます。

プリコード-0|

これがWebサイトのアクションである場合は、プロキシを使用するようにブラウザを設定できますか、それとも単にVPNに接続しますか?

ソース

1 -Liquid Core

興味があるかもしれません

© 2021   KonnichiwaSekai.Com