В настоящее время у нас есть клиент (основное веб-приложение MVC .Net) и веб-API, который используется для доступа к вызовам Microsoft Graph, в процессе аутентификации используется конечная точка Azure AD v2.0.мы можем заставить это работать, если мы сделаем все это на клиенте, однако, как только мы передадим токен в Web API, это не получится и даже не вернет ответ, который поможет нам диагностировать.ниже приведено множество вещей, которые мы попробовали, мы пришли к выводу, что наша лазурь настроена неправильно, но неуверенно.
Процесс 1 работает
Мы забываемвеб-API и делать все действия внутри клиента, этот метод работает, но не то, что нам нужно, поэтому мы знаем, что код не нарушен.
Сбой процесса 2
- Клиент аутентифицируется в Microsoft graph
- перенаправляет с кодом на клиент
- отправляет код в Web API для аутентификации, получает токен доступа и обновляет токен
- Сбой ничего не возвращает
Сбой процесса 3
- Клиент аутентифицируется в графе Microsoft
- перенаправляет с кодом на клиент
- отправить код в клиент для проверки подлинности, получить токен доступа и обновить токен
- отправить токен доступа и обновить токен в Web API
- использовать токен для выполнения действия графа Microsoft
- Сбойничего не возвращает
Настройки Azure
В Microsoft Azure мы попытались настроить Microsoft Active Directory, следуя этому примеру .Тем не менее, он использует WPF и не может заставить это работать.Мы следуем за этим шаг за шагом, и даже пользователю предлагается с разрешениями API, которые все еще не работают.Я рад предоставить любую дополнительную информацию, чтобы помочь диагностировать эту проблему.
Наша архитектура, которую мы пытаемся достичь.
Обновление Здесь мы обмениваем код авторизации на токен доступа, однако это не дает ответного ответа и время ожидания истекает примерно через 100 секунд.даже не продолжай.
HttpContent content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{"code", code},
{"client_id", _clientId},
{"client_secret", _clientSecret},
{"redirect_uri", _redirectUri},
{"grant_type", _codeGrantType}
});
using (HttpClient client = new HttpClient())
{
var response = await client.PostAsync(_tokenServerUrl, content);
if (response.IsSuccessStatusCode)
{
//get token from body and update expiry time...
var token = await response.Content.ReadAsJsonAsync<OAuthToken>();
token.ExpiresOn = DateTime.Now.AddSeconds(token.ExpiresIn - 100);
return token;
}