2014-11-03 120 views
1

当设置我的owin self托管投影时,我想将其设置为使用Windows域进行身份验证。据我所知,这是通过协商协议执行的,在协议中它会尝试使用Kerberos并在不可用的情况下返回到NTLM。我在网上看了一下,代码片段看起来像这样IntegratedWindowsAuthentication vs Negotiate有什么区别?

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

虽然我发现了AuthenticationSchemas枚举。枚举是一个标志枚举,但我试图打开集成的窗口和协商之间的区别是什么?两者似乎都提供了Kerberos和对NTLM的故障回复。为什么我会使用其中一个或另一个?文件对这件事不是很有帮助。

回答

0

IWA是什么功能是通过IIS

称为

协商是有线协议的用于实现它的名字

+0

这将是很好,但在这个枚举的上下文有什么区别?为什么他们有不同的标志值(6 vs 2)。将它设置为Negotiate,我得到挑战周期,我的响应'www-authenticate'标题读取Negotiate,第二个'www-authenticate'是Negotiate,随后是base64标签。 – 2014-11-03 20:44:19

0

目前似乎并没有太大的文档在这里http://msdn.microsoft.com/en-us/library/system.net.authenticationschemes(v=vs.110).aspx

我不得不猜测并说他们是相同的,或者IWA选项将推迟到其他系统默认设置,例如IIS的配置,而强制协商将覆盖它。您可以尝试使用IWA,然后在IIS中更改它(使用OWIN/Katana)。

需要注意的是它在System.Net命名空间不OWIN所以你可能需要做一些测试

2

枚举被定义为:

[System.Flags] 
public enum AuthenticationSchemes 
{ 
    None = 0, 
    Digest = 1, 
    Negotiate = 2, 
    Ntlm = 4, 
    IntegratedWindowsAuthentication = Ntlm | Negotiate, 
    Basic = 8, 
    Anonymous = 32768, 
} 

其中,而回答的问题......

IWA与刚才的谈判有何不同,看到协商会回落到Ntlm,你想知道吗?区别在于如何在Http头文件中发送Ntlm消息。 Plain Ntlm消息将通过WWW-Authenticate标题看起来像NTLM <some base 64 encoded data>,而Negotiate协议的Ntlm消息将在附加协议内包含NTLM数据。 Web服务器可能会发送许多类型的Authenticate标头,以防客户端不支持其中一种。

所以,虽然Ntlm和Negotiate可能都做Ntlm身份验证,但是有线协议是不同的。

相关问题