4

我有以下配置:

  1. 自托管 ASP.NET Web API
  2. ASP.NET MVC 3 Web 应用程序

Web 应用程序 [2] 通过 HTTPS 与 Web API [1] 通信。他们(目前)都住在同一台机器上。

Web API [1] 的 Http 绑定配置如下:

httpBinding.Security.Mode = HttpBindingSecurityMode.Transport; httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
httpBinding.TransferMode = TransferMode.Streamed

我无法使用 https 和 ntlm 授权使其工作。

  • 如果我通过纯 http 进行通信,它可以工作并且我已通过正确的身份验证
  • 如果我通过 https 进行通信,则所有具有 [Authorize] 标签的控制器操作都会出现“401 Unauthorized”错误(它适用于不需要授权的操作)

为什么只更改传输协议(从 http 到 https)会阻止 NTLM 身份验证工作?

感谢您提供任何帮助!

4

1 回答 1

2

@Jacek Nowak 我自己也遇到了同样的问题,今天我刚刚找到了答案,在下面的帖子中有详细说明。

下面是我将如何编码。

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 = System.ServiceModel.HttpClientCredentialType.Ntlm;
        httpBinding.ConfigureTransportBindingElement = 
            element => element.AuthenticationScheme = 
                System.Net.AuthenticationSchemes.IntegratedWindowsAuthentication;
        return base.OnConfigureBinding(httpBinding);
    }
}


public static class Program()
{
    public static void main(string[] args)
    {
        var config = new NTLMSelfHostConfiguration("https://localhost/");            
        config.Routes.MapHttpRoute("Main",
                                    "api/{controller}");

        var server = new HttpSelfHostServer(config);

        server.OpenAsync().Wait();

        Console.WriteLine("Running");
        Console.ReadLine();

        server.CloseAsync().Wait();


    }
}
于 2015-01-06T00:25:16.683 回答