我正在为IIS创建一个(表单)身份验证模块(HTTPModule),它从登录页面读取身份验证,设置cookie并重定向。一切都适用于所有网站和子应用程序。因为该模块还保护web服务,所以我构建了一个也读取授权头的部分。因为这些服务也应该从其他工具访问。
现在我已经到了实际保护web服务的地步,一切都很棒,并且使用auth标头来处理请求我确实可以总是访问web服务但是我只能在标题处于活动状态时访问它(并且在我得到每个请求之后)另一个饼干)。
如果我尝试使用正常登录访问它,我也可以访问具有相同保护的其他站点,然后我将重定向回登录页面:S。我真的不明白为什么会这样。
PS HttpContext.Current.Request.IsAuthenticated在我的模块中访问服务时始终为false,但我的代码是:
if(!HttpContext.Current.Request.IsAuthenticated){
if(Forms["Username"] != null){
//do authenticatoin & setCookie and Principle
}
}else{
if(AuthHeader is there){
//do authenticatoin & setCookie and Principle
}
}
当然,现在每个请求都会对每个请求进行身份验证并设置原则。但为什么哦,为什么它看不到(发送)我的cookie,而其他应用程序确实看到它? (使用完全相同的模块)
OnAuthenticateMethod也不会收到FormsAuth票证/ cookie,但会收到我设置的其他Cookie。
我已检查过的事情: * web.config授权是正确的。 *机器密钥设置为cookie。 * Cookie名称相似 * .ASPXAUTH cookie不会向OnAuthenticateMethod发送,但它确实会被浏览器在Cookie标头中发送。
我很遗憾为什么会这样。