首页 > 解决方案 > 从客户端获取承载或 AuthResult?

问题描述

我正在实例化这样的图:

public static async Task<GraphServiceClient> GetGraphClient(string clientId, string clientSecret, string tenantName)
{
    AuthenticationResult authResult = await
       GetAuthenticationResult(tenantName, clientId, clientSecret);

    var client = new GraphServiceClient(new DelegateAuthenticationProvider(
        (requestMessage) =>
        {
            requestMessage.Headers
                .Add("Authorization", "Bearer " + authResult.AccessToken);
            return Task.FromResult(0);

        }));

    return client;
}

我有另一种扩展方法,我需要来自客户端的 Bearer:

public static async Task<T> GetRESTResult<T>(this GraphServiceClient client, string url)
{
    HttpClient http = new HttpClient();

    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization =
        new AuthenticationHeaderValue("Bearer", HERE????.AccessToken);
    HttpResponseMessage response = await http.SendAsync(request);
    var jsonStr = response.Content.ReadAsStringAsync();
    return JsonConvert.DeserializeObject<T>(jsonStr.Result);
}

如何从给定的客户端对象中获取 authresult/bearer?

标签: c#microsoft-graph-apimicrosoft-graph-sdks

解决方案


您应该通过 SDK 发送 HTTP 请求,而不是SDK 中提取令牌:

public static async Task<T> GetRESTResult<T>(this GraphServiceClient client, string url)
{
    // Create the request message and add the content.
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);

    // Authenticate (add access token) our HttpRequestMessage
    await client.AuthenticationProvider.AuthenticateRequestAsync(request);

    // Send the request and get the response.
    HttpResponseMessage response = await client.HttpProvider.SendAsync(request);

    // Process the response
    var jsonStr = response.Content.ReadAsStringAsync();
    return JsonConvert.DeserializeObject<T>(jsonStr.Result);
}

推荐阅读