1

我们收集 Windows 域用户名和密码,并通过 Web 前端将其保存在 cookie 中。这些凭据以及对特定数据的请求最终通过托管在 Windows 服务中的 WCF 调用传递,该调用本身将其作为新的 REST 调用重定向到配置了 Windows 身份验证的 IIS 下的另一个服务器设置。这是使用 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 存储在 cookie 中,通过上述方式发出请求(一切正常),然后将我的 windows 域密码更改为 B,我们为后续请求找到的是上面的代码(再次作为 windows 运行服务)在接收和设置 NetworkCredential 上的 A 时会很高兴地进行身份验证(接收 A,因为 cookie 仍然使用旧密码)。如果我们立即重新启动服务,任何进一步尝试使用密码 A 的 HttpWebRequest 和 NetworkCredential 都会生成 401。为什么在重新启动之前会使用旧的域密码?你如何阻止这种行为?

4

0 回答 0