System.Net.Http.WinHttpException: 访问被拒绝?

System.Net.Http.WinHttpException: Access is denied?

我实现了两个aspnet core webapi服务。第一个服务(.net core)使用restsharp调用第二个服务(.net framework 461):

 public static RestResponse Execute(this IRestClient client, IRestRequest request)
    {
        var taskCompletion = new TaskCompletionSource();
        client.ExecuteAsync(request, r => taskCompletion.SetResult(r));
        return (RestResponse)(taskCompletion.Task.Result);
    }

请注意,任务是有意同步调用的,因此代码中有 .Result。此方法也称为使用经过身份验证的用户模拟!

这两项服务都托管在 IIS 中,并配置为使用 Kerberos windows 身份验证。这两项服务都是 运行 作为管理员。只有第一个服务使用 https,另一个仅使用 http,但两者都使用与绑定相同的域 url。现在,当我在本地开发环境中调试这两个服务时,一切正常。将代码移至 IIS,出现以下异常:

调用上述方法时出现错误Execute。如果 Kerberos 有问题,我已经检查了事件日志,但看不到任何与 Kerberos 相关的问题。在我的日志文件中,我还可以看到第二个服务没有 运行ning 任何代码,调用没有进行到那么远。

有人能给我指出正确的方向吗?我不知道是什么导致了这个问题。

更新 我尝试从服务器外部使用 Firefox 调用这两种服务,这运行了几次,但在重新启动服务器后它不再运行了。非常奇怪的行为。

我发现我们得到的异常是由于错误地将服务主体名称分配给两个服务。两种服务都在同一台机器上 运行,这诱使我们对两种服务使用相同的 SPN,但端口不同。这是个坏主意(不要那样做!)并导致各种奇怪的异常,例如 WebException "Access is denied".

为每个服务分配一个唯一的 SPN 解决了​​这个问题,异常消失了。