我有一个关于使用 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
有没有人对此有类似的经验或解释?