Msgraph 调用仅通过 IIS 超时

Msgraph Calls only via IIS timing out

我写了一个 API 来调用 MSGraph 来检索 https://graph.microsoft.com/v1.0/users?$count=true&$search= 上的用户信息并将其传送到我的 .Net5.0 webapp。

到目前为止一切正常,直到我尝试在我的 IIS 上发布 API 和 运行 它。

从我的 IIS 中它只 运行 超时:“详细信息”:“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能回应。(graph.microsoft.com:443)",

我尝试从同一台服务器调用 MSGraph,它在我的开发环境中也可以毫无问题地运行邮递员。

我的 API 身份验证是通过带有客户端 ID 和客户端密码的 Azure 门户应用程序注册完成的。

像这样:

[HttpGet]
[Route("TokenRequest")]
public string MSGraphTokenRequest()
{
    var client = new RestClient("https://login.microsoftonline.com/350a94cb-4159-4140-b29d-1d98051105d5/oauth2/v2.0/token");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("content-type", "application/x-www-form-urlencoded");
    request.AddParameter("application/x-www-form-urlencoded", "grant_type="+grant_type+"&client_id="+client_id+"&client_secret="+client_secret+"&scope="+scope, ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);
    return JsonConvert.DeserializeObject<Token>(response.Content).access_token; 
}

并请求信息:

        [HttpGet]
    [Route("GetUserTest")]
    public IActionResult GetUserTest(string userPrincipalName)
    {
        var client = new RestClient("https://graph.microsoft.com/v1.0/users?$count=true&$search=\"userPrincipalName:" + userPrincipalName + "\"");
        client.Timeout = -1;
        var request = new RestRequest(Method.GET);
        request.AddHeader("authorization", "Bearer " + MSGraphTokenRequest());
        request.AddHeader("ConsistencyLevel", "eventual");
        IRestResponse response = client.ExecuteAsync(request).Result;
        if (((int)response.StatusCode) != 200)
        {
            return Problem(response.ErrorMessage);
        }
        else
        {
            return Json(response.Content);
        }
    }

也许有人可以指导我正确的方向我不知道如何解决这个问题。 提前致谢。

所以我的猜测是 IIS 服务器正在向它发送具有更高端口号的请求,并且这些请求被我们公司的防火墙拦截了,当然我事先询问了我的开发人员,如果这可能与防火墙有关问题... 所以问题的解决方案是为 graph.microsoft.com.

添加防火墙规则