1

我有一个关于使用 IIS 和 HttpListner 进行 Windows 身份验证的问题

我有以下设置(全部安装在同一个 Windows 8.1 框中。没有外部通信)。所有请求都作为http://localhost/发送......

IIS

ASP.Net Web 应用程序身份验证

Anonymous: Disabled 
Windows Authentication: Enabled

.Net httpListener

作为服务运行作为本地系统帐户运行。并启用 Windows 身份验证

this.httpListener = new HttpListener();
this.httpListener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;

UWP 应用程序 (Windows 8.1)

UWP 应用程序就像一个网络浏览器。它具有 WebView 控件以查看 Web 内容。

启用以下功能

  • 企业认证
  • 互联网(客户端)
  • 地点
  • 专用网络(客户端和服务器)

问题

当我从 uwp 应用程序导航到 IIS Web 应用程序时,它会通过弹出窗口对话框来询问凭据。从用户体验的角度来看,这很烦人,因为用户使用相同的凭据登录。但是当我访问 Http Listener 时,它是正确的身份验证并且没有凭据对话框。

我还通过提琴手检查了请求。初始请求是相同的,但是对于 IIS 请求的后续步骤,它会不断地请求 NTLM。

HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.5
WWW-Authenticate: Negotiate oYHOMIHLoAMKAQGhDAYKKwYBBAGCNwICC........
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET

初始请求/响应

IIS

要求

GET http://localhost/webapp_net/ HTTP/1.1
Accept-Encoding: gzip, deflate
Host: localhost
Connection: Keep-Alive

回复

HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.5
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST
Date: Tue, 20 Nov 2018 21:37:24 GMT
Content-Length: 6016
Proxy-Support: Session-Based-Authentication

HttpListener

要求

GET http://localhost/appman HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-NZ
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; WebView/2.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: localhost

回复

HTTP/1.1 401 Unauthorized
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
Date: Tue, 20 Nov 2018 21:37:18 GMT
Proxy-Support: Session-Based-Authentication

有没有人对此有类似的经验或解释?

4

0 回答 0