У вас нет прав для просмотра этого каталога или несанкционированной страницы 401 - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть веб-приложение, работающее в Azure с включенной azure аутентификацией Active Directory. Это дано ниже (я настроил это правильно, с этим проблем нет): -

enter image description here

Теперь я хочу вызвать один из API это веб-приложение. Код для получения токена доступа на основе учетных данных клиента: -

public static string GetAccessToken()
        {
            string authContextURL = "https://login.microsoftonline.com/" + "TENANT_ID";
            var authenticationContext = new AuthenticationContext(authContextURL);
            var credential = new ClientCredential("CLIENT_ID", "CLIENT_SECRET");
            var result = authenticationContext.AcquireTokenAsync("URL_FOR_MY_WEBAPP", credential).Result;

            if (result == null)
            {
                throw new InvalidOperationException("Failed to obtain the token");
            }

            string token = result.AccessToken;
            return token;
        }

Код для вызова требуемого API: -

private static string GET(string URI, string token)
        {
            Uri uri = new Uri(string.Format(URI));

            // Create the request
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
            httpWebRequest.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "GET";

            // Get the response
            HttpWebResponse httpResponse;
            try
            {
                httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            }
            catch (Exception ex)
            {
                return ex.Message;
            }

            string result = null;
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                result = streamReader.ReadToEnd();
            }

            return result;
        }

Я получаю несанкционированную ошибку при получении ответа. Кто-нибудь может сказать, что здесь не так? Тот же принципал работает с графическим клиентом. Любая помощь или предложение будут оценены.

1 Ответ

1 голос
/ 07 апреля 2020

Неверный ресурс для получения токена доступа. Вы должны использовать тот же идентификатор клиента вашего приложения AD.

var result = authenticationContext.AcquireTokenAsync("{CLIENT_ID}", credential).Result;
...