Неверный токен на предъявителя - PullRequest
1 голос
/ 26 сентября 2019

У меня есть два метода.Один получает и возвращает токен доступа на основе AzID ClientID и секретного ключа Azure для приложения, которое я зарегистрировал.Второй затем вызывает функцию Azure, однако функция возвращает ошибку:

[26.09.2009 12:18:49 PM] Создание новой команды.

[26.09.2009 12:19:00] Выполнение команды AddTeam (Failed, Id = aaecc7fa-e3bd-40e7-8be9-a 8a173cc166b)

[26.09.2009 12:19:00 PM] System.Private.CoreLib: Исключительная ситуация при выполнении функции on: AddTeam.System.Net.Http: Формат значения «Носитель» недействителен.

Любая помощь с благодарностью получена, так как она сводит меня с ума!

public static async Task<string> GetAccessToken()
{
    string clientId = "clientIDFromAzure";
    string clientKey = "secretKeyFromAzure";

    string authContextURL = "https://login.microsoftonline.com/tennantID";
    var authenticationContext = new AuthenticationContext(authContextURL);
    var credential = new ClientCredential(clientId, clientKey);
    var result = await authenticationContext
            .AcquireTokenAsync("https://management.azure.com/", credential);
    if (result == null)
    {
        throw new InvalidOperationException("Failed to obtain the token");
    }
    string token = result.AccessToken;
    return token;
}

public static async Task<string> CallGraph(HttpMethod method, string uri, string body)
{

    HttpClient httpClient = new HttpClient();
    string graphEndpoint = "https://graph.microsoft.com/";

    var request = new HttpRequestMessage(method, graphEndpoint + uri);
    request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    string accessToken = await TokenHelper.GetAccessToken();

    request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer ", accessToken);

    if (method != HttpMethod.Get)
        request.Content = new StringContent(body, Encoding.UTF8, "applciation/json");
    HttpResponseMessage response = await httpClient.SendAsync(request);
    string responseBody = await response.Content.ReadAsStringAsync();
    if (!response.IsSuccessStatusCode)
        throw new Exception(responseBody);
    return responseBody;
}

1 Ответ

0 голосов
/ 27 сентября 2019

В методе GetAccessToken вы пытаетесь получить токен доступа для API управления Azure.

var result = await authenticationContext
            .AcquireTokenAsync("https://management.azure.com/", credential);

Однако вы фактически используете этот токен для вызова Microsoft Graph API.Вот почему вы получаете ошибку аутентификации.

Чтобы решить эту проблему:

  1. Вам необходимо добавить необходимые разрешения API-интерфейса Graph в свое приложение, зарегистрированное в Azure AD, а затем дать согласие на эти разрешения.

enter image description here

Измените свой код, чтобы получить токен для Microsoft Graph API.
var result = await authenticationContext
            .AcquireTokenAsync("https://graph.microsoft.com/", credential);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...