我有一个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

推荐人:狡猾

连接:保持活力

以下是我的配置的相关部分(如果需要,我可以发布更多):

我的自定义http模块(在visual studio的测试中工作正常)。这主要取自example on 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)

{

Thread.CurrentPrincipal = principal;

if (HttpContext.Current != null)

{

HttpContext.Current.User = principal;

Log.LogIt("current principal: " + principal.Identity.Name);

}

}

private static bool CheckPassword(string username, string password)

{

string passHash = AuthUser.GetUserPassword(username);

if (PasswordHash.ValidatePassword(password, passHash))

{

return true;

}

else

{

return false;

}

}

private static bool AuthenticateUser(string credentials)

{

bool validated = false;

try

{

var encoding = Encoding.GetEncoding("iso-8859-1");

credentials = encoding.GetString(Convert.FromBase64String(credentials));

int separator = credentials.IndexOf(':');

string name = credentials.Substring(0, separator);

string password = credentials.Substring(separator + 1);

validated = CheckPassword(name, password);

if (validated)

{

var identity = new GenericIdentity(name);

SetPrincipal(new GenericPrincipal(identity, null));

}

}

catch (FormatException)

{

// Credentials were not formatted correctly.

validated = false;

Log.LogIt("not validated");

}

return validated;

}

private static void OnApplicationAuthenticateRequest(object sender, EventArgs e)

{

var request = HttpContext.Current.Request;

var authHeader = request.Headers["Authorization"];

if (authHeader != null)

{

var authHeaderVal = AuthenticationHeaderValue.Parse(authHeader);

// RFC 2617 sec 1.2, "scheme" name is case-insensitive

if (authHeaderVal.Scheme.Equals("basic",

StringComparison.OrdinalIgnoreCase) &&

authHeaderVal.Parameter != null)

{

AuthenticateUser(authHeaderVal.Parameter);

}

}

}

// If the request was unauthorized, add the WWW-Authenticate header

// to the response.

private static void OnApplicationEndRequest(object sender, EventArgs e)

{

var response = HttpContext.Current.Response;

if (response.StatusCode == 401)

{

response.Headers.Add("WWW-Authenticate",

string.Format("Basic realm="{0}"", Realm));

}

}

public void Dispose()

{

}

}

}

我的IIS服务器以集成管道模式托管并运行.NET 4。我禁用了表单身份验证和禁用模拟。我在服务器上启用了基本身份验证和匿名身份验证方法。

我已经阅读了无数的论坛回复和关于此的帖子,没有什么能让我得到一个明确的答案。

服务器网口正在验证身份6,无法使用基本身份验证进行身份验证(示例代码)相关推荐

  1. ajax验证下拉框,ajax 遍历select 下拉框(示例代码)

    html : js代码: //动态绑定下拉框项 function addnotice() { $.ajax({ url: "${pageContext.request.contextPath ...

  2. windows 中 vpn连接提示, 虚拟专用网络 由于RAS/虚拟专用网络,服务器上配置的某个策略,服务器用于验证用户名和密码的身份验证方法可能与连接配置文件中的身份证验证方法不匹配

    windows 虚拟专用网络 由于RAS/虚拟专用网络,服务器上配置的某个策略,服务器用于验证用户名和密码的身份验证方法可能与连接配置文件中的身份证验证方法不匹配 打开网络 更换网络适配器 选项 右键 ...

  3. 视频系统 存储服务器 黄灯闪烁,服务器网口黄灯闪烁

    服务器网口黄灯闪烁 内容精选 换一换 Atlas 200 DK开发者板支持通过USB端口或者网线与Ubuntu服务器进行连接,连接示例图如图1所示.Atlas 200 DK连接Ubuntu服务器有以下 ...

  4. RDO远程连接时提示“远程计算机需要网络级别身份验证,而您的计算机不支持该验证解决办法!

    RDO远程连接时提示"远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助" 当服务器重装操作系统后使用RDO远程连接时会出现错误提 ...

  5. 在服务器密钥交换握手信息,TLS的握手流程-密钥协商与身份认证过程 | 程序小兵...

    在安全HTTPS中提及到的密钥协商(安全通讯前的准备工作)中,包含了身份认证和密钥协商2大过程如下,其中SSL协议包含记录协议和握手协议,在握手协议中协商通讯传输的的对称加密密码.压缩算法.加密算法等 ...

  6. oauth身份验证方式_使用OAuth和Passport管理身份验证

    oauth身份验证方式 用户组列表和信息(UGLI)应用程序开始很好地成形. 现在,您可以通过在" 具有响应式Web设计的MEAN和UGLI CRUD "中设置的CRUD屏幕显示您 ...

  7. XP远程桌面连接2008提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证

    装了一台2008机器,开了远程桌面,然后用同事 win7 连接测试,发现可以连接上. 晚上回到家里,自己电脑连接,却报错. --------------------------- 远程桌面连接已断开 ...

  8. 远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助...

    故障:"远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助" 故障症状:当您使用Windows XP"远程桌面连接&qu ...

  9. XP远程桌面连接2008提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证...

    装了一台2008机器,开了远程桌面,然后用同事 win7 连接测试,发现可以连接上. 晚上回到家里,自己电脑连接,却报错. --------------------------- 远程桌面连接已断开 ...

  10. 【转】XP远程桌面连接2008提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证 ....

    装了一台2008机器,开了远程桌面,然后用同事 win7 连接测试,发现可以连接上. 晚上回到家里,自己电脑连接,却报错. --------------------------- 远程桌面连接已断开 ...

最新文章

  1. python 切片_全面解读Python高级特性切片
  2. 云图说|一张图看懂一站式DevOps利器——华为云DevCloud
  3. 既然报个培训班就可以成为码农,那学计算机专业有什么用?
  4. SpringCloud使用Prometheus监控(基于Eureka)
  5. HtmlAgilityPack.dll的使用 获取HTMLid
  6. [windows]mstsc远程报:这可能是由于CredSSP 加密Oracle修正的解决方法
  7. loadrunner 操作mysql_loadrunner动态从mysql取值
  8. 怎么维护 SQLite
  9. 【C++】STL-函数对象(仿函数)
  10. django3.0入门教程【三】:Hello,world!(完整踩坑笔记)
  11. 批量合成bilibili的m4s缓存文件为MP4格式 ver2.0
  12. 什么是阿里云服务器ECS?
  13. 微博如何取消关注不存在的_为什么“取消文化”将继续存在
  14. 20171204 甲流疫情死亡率
  15. 一、虚拟化技术发展概述
  16. uni-app手机调试equest:fail abort
  17. php抖音跳转地址,PHP抖音无水印解析api
  18. 新手入门板卡硬件调试
  19. 家庭支出系统c语言,家庭支出管理系统—c语言程序设计讲述.doc
  20. 基于tq6410的linux使用教程,基于tq6410的linux使用教程

热门文章

  1. 例子 类的定义与对象的创建 狗的例子
  2. 新建一个虚拟环境 用于django的项目
  3. 暑假周总结二7.22
  4. passive 的事件监听器
  5. delphi刷新界面所选行丢失问题
  6. 内网 根据计算机名查IP
  7. 用SublimeText当Unity Shader的编辑器
  8. 猫都能学会的Unity3D Shader入门指南(二)
  9. hdu 5616 Jam's balance(dp 正反01背包)
  10. WinCE5.0下直接写屏操作与函数 CreateDIBSection() 的使用(转)