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.
添加防火墙规则
我写了一个 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.
添加防火墙规则