Не получить токен в Azure API-приложений - ADAL - PullRequest
0 голосов
/ 27 мая 2020

Я создал API, в котором я пытаюсь получить токен, а затем получить данные с помощью этого токена. Он отлично работает в режиме отладки Visual Studio / локально, запрос учетных данных пользователя, поскольку MFA включен, также будет запрошен OTP и работает нормально

Проблема в том, что когда я развертываю в Azure приложениях API / WEb, он не работает и не работает на линии, где был получен токен. Также заметил, что он никогда не запрашивает учетные данные пользователя при развертывании в веб-приложении. Я хочу получить токен в автоматическом режиме, если это невозможно, запрос учетных данных тоже ОК. По крайней мере, он должен работать после глубокого развертывания в веб-приложении. Вот фрагмент кода:

using Microsoft.IdentityModel.Clients.ActiveDirectory;

//API Method
public async Task<IEnumerable<string>> Get()
    {
        try
        {
    private static string authority = String.Format(CultureInfo.InvariantCulture, "https://login.microsoftonline.com/{0}" ,"575d120d-78ae-41fc-b5a0-4072a4349b");

    AuthenticationResult result = null;
            HttpClient httpClient = new HttpClient();
            AuthenticationContext authContext = new AuthenticationContext(authority);
            result = await authContext.AcquireTokenAsync(todoListResourceId, clientId, redirectUri, new PlatformParameters(PromptBehavior.Auto));//new PlatformParameters(PromptBehavior.Auto)
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
            // Call the To Do list service.
            HttpResponseMessage response = await httpClient.GetAsync(todoListBaseAddress + "locations");//+ "/api/values/4"
            if (response.IsSuccessStatusCode)
            {
                //MessageBox.Show(response.RequestMessage.ToString());
                string s = await response.Content.ReadAsStringAsync();
            }

  }
        catch (HttpRequestException ex)
        {
            return new string[] { ex.Message, ex.StackTrace };
        }
        catch (Exception ex)
        {
            return new string[] { ex.Message, ex.StackTrace };
        }
    }

1 Ответ

1 голос
/ 29 мая 2020

Убедитесь, что оба приложения зарегистрированы в Azure AD и предоставлено согласие пользователя для потока от имени пользователя.

Для тихого получения токена выполните рекомендуемый шаблон и сначала вызовите AcquireTokenSilentAsync, а затем - AcquireTokenAsync только в случае неудачи.

...