我有一个ASP.NET WebApi服务,需要http基本身份验证(这是为了演示,而不是生产,所以这是基本身份验证的原因,而不是更安全的东西).Visual Studio IIS Express服务器运行良好,并通过自定义HTTP模块进行身份验证.
当我将站点部署到托管服务器时,它会失败并继续弹出登录屏幕.我向Fiddler验证了正在发送请求并且正在发送凭据.但它继续响应401未经授权的响应.似乎请求凭据在从客户端到服务器的时间内以某种方式丢失.我花了很多时间来尝试诊断这一点,使用Web API和IIS进行.NET身份验证似乎非常混乱.请帮忙!!
来自Fiddler的传出请求显示:
获取mywebsiteaddress HTTP/1.1
主机:我的网站地址
User-Agent:Mozilla/5.0(Windows NT 6.1; WOW64; rv:21.0)Gecko/20100101 Firefox/21.0
接受:/
Accept-Language:en-US,en; q = 0.5
Accept-Encoding:gzip,deflate
授权:基本YmJvbm5ldDE4Om9jdG9iZXIxNw ==
X-Requested-With:XMLHttpRequest
Referer:mysite
连接:keep-alive
以下是我的配置的相关部分(如果需要,我可以发布更多):
<modules>
<add name="BasicAuthHttpModule" type="ITMService.Modules.BasicAuthHttpModule"/>
</modules>
<httpModules>
<add name="BasicAuthHttpModule" type="ITMService.Modules.BasicAuthHttpModule"/>
</httpModules>
<authentication mode="Windows"/>
Run Code Online (Sandbox Code Playgroud)
我的自定义http模块(在visual studio的测试中工作正常).这主要取自asp.net上的示例:
namespace ITMService.Modules
{
public class BasicAuthHttpModule : IHttpModule
{
private const string Realm = "www.mysite.net";
public void Init(HttpApplication context)
{
context.AuthenticateRequest += OnApplicationAuthenticateRequest;
context.EndRequest += OnApplicationEndRequest;
}
private static void SetPrincipal(IPrincipal principal) …
Run Code Online (Sandbox Code Playgroud)