ASP.NET Web API Self-Host with Windows Authentication ASP.NET Web API Self-Host with Windows Authentication asp.net asp.net

ASP.NET Web API Self-Host with Windows Authentication


I've hit this issue as well and the only solution I've came up with is to deliver dedicated HttpSelfHostedConfiguration:

public class NtlmSelfHostConfiguration : HttpSelfHostConfiguration{    public NtlmSelfHostConfiguration(string baseAddress)        : base(baseAddress)    { }    public NtlmSelfHostConfiguration(Uri baseAddress)        : base(baseAddress)    { }    protected override BindingParameterCollection OnConfigureBinding(HttpBinding httpBinding)    {        httpBinding.Security.Mode = HttpBindingSecurityMode.TransportCredentialOnly;        httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;        return base.OnConfigureBinding(httpBinding);    }}

To use it you just need to change one line (you don't need to set UseWindowsAuthentication anymore):

var config = new NtlmSelfHostConfiguration("http://myComputerName:8080");

The only issue with this approach is that authentication is now required for every request made to server which is using this configuration.


i have hosted "Web API" in windows service and this is what i did to support windows authentication (basically based on above question, answers, some related articles - i am just consolidating as it may be helpful for others)

@HTTP Server (web api):

Set (reference: http://msdn.microsoft.com/en-us/library/system.web.http.selfhost.httpselfhostconfiguration.clientcredentialtype(v=vs.118).aspx),

HttpSelfHostConfiguration.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Windows;

@Client:

And then as Allan mentioned (above) set UseDefaultCredentials to true.

Using HttpClient:

var handler = new HttpClientHandler();    handler.UseDefaultCredentials = true;    _httpClient = new HttpClient(handler);

Using WebClient (reference: http://msdn.microsoft.com/en-us/library/system.net.webclient.usedefaultcredentials.aspx )

set webclient's usedefaultcrednetials to 'true'.

Best Regards!


I am a little late to this. However, if you are using Owin to self host and need windows auth. In your startup class you can add the following.

public class Startup{    public void Configuration(IAppBuilder app)    {        HttpListener listener = (HttpListener)app.Properties["System.Net.HttpListener"];        listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;    }}