我们收集一个Windows域用户名和密码,并通过Web前端将其保存在cookie中。这些凭据以及对特定数据的请求是持续进行的,最终通过Windows服务中托管的WCF调用传递,该服务本身将其作为新的REST调用重定向到IIS下配置了Windows auth的另一个服务器设置。这是使用HttpWebRequest ...
完成的var url = baseServerUrl + "/" + apiCall.Url;
var request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 1000000;
request.Method = apiCall.HttpMethod;
bool credentialsSet = false;
if (!string.IsNullOrEmpty(apiCall.Identity))
{
// split into Domain\User\Password
var parts = apiCall.Identity.Split('\\');
if (parts.Length == 3)
{
request.Credentials = new NetworkCredential(parts[1], parts[2], parts[0]);
credentialsSet = true;
}
}
// Then more code submitting the request ...
因此,如果我存储在cookie域密码A中,通过上面的请求(一切正常),但是然后将我的Windows域密码更改为B,我们为后续请求找到的是上面的代码(再次运行)作为一个Windows服务)将很高兴地在NetworkCredential上接收和设置A时进行身份验证(接收A因为cookie仍旧使用旧密码)。如果我们立即重新启动服务,任何进一步尝试使用HttpWebRequest和NetworkCredential与密码A生成401.为什么旧的域密码在重新启动之前得到尊重?你怎么阻止这种行为?