ASP.NET Core Uygulamalarında Remote IP Adresi Problemi

ASP.NET Core ile geliştirilmiş bir web uygulamasının load balancer arkasında çalışabilmesi için UseForwardedHeaders middleware’ının kullanılması gerekmektedir. Bu middleware load balancer’ın yönlendirdiği X-Forwarded-Proto ve X-Forwarded-For http headerlarından gelen değerin uygulamamız tarafından erişilebilmesini sağlar. Örnek kullanımı aşağıdaki gibidir.

var forwardingOptions = new ForwardedHeadersOptions()
{
    ForwardedHeaders = ForwardedHeaders.XForwardedAll
};
 
app.UseForwardedHeaders(forwardingOptions);

Bu middleware sayesinde kullanıcının IP adresini elde edebilirsiniz. Ancak Google Cloud gibi ortamlarda çalışan bir uygulamanız varsa IP adresi talebi yaptığınız zaman load balancer’ın IP adresini size verecektir. Bu sorunun sebebi ForwardedHeadersOptions sınıfının KnownProxies özellik değerinin IPAddress.Loopback olmasından dolayı kaynaklanmaktadır. Sorunun çözümü KnownProxies özelliğine ya load balancer’ın ve uygulamanın çalıştığı makinenin IP adresini vermek ya da bu özelliğin değerini sıfırlamak gerekir.

var forwardingOptions = new ForwardedHeadersOptions()
{
    ForwardedHeaders = ForwardedHeaders.XForwardedAll
};
forwardingOptions.KnownNetworks.Clear();
forwardingOptions.KnownProxies.Clear();
 
app.UseForwardedHeaders(forwardingOptions);

Kaynak: https://stackoverflow.com/questions/43749236/net-core-x-forwarded-proto-not-working