Azure的Microsoft Graph请求上的Authorization_RequestDenied

时间:2019-01-02 07:49:34

标签: azure microsoft-graph azure-functions

我有一个非常基本的天蓝色函数:

#r "Newtonsoft.Json"

using System.Net;
using System.Net.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, string authToken, ILogger log)
{
    string msgId = req.Query["messageId"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    msgId = msgId ?? data?.messageId;

    if (string.IsNullOrEmpty(msgId))
        return new BadRequestObjectResult("Please pass a messageId on the query string or in the request body");

    // access me via graph
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + authToken);
        var response = await client.GetAsync("https://graph.microsoft.com/v1.0/users/*****/mailFolders/inbox/messages/" + msgId);
        string retResp = await response.Content.ReadAsStringAsync();
        log.LogInformation(retResp);
    }

    return new OkObjectResult(msgId);
}

Auth令牌是由azure函数Auth令牌绑定提供的: Auth token Input binding

但是我总是从Microsoft图形中得到以下答案:

{
    "error": {
        "code": "Authorization_RequestDenied",
        "message": "Insufficient privileges to complete the operation.",
        "innerError": {
            "request-id": "24a1e799-2f9f-4452-8d46-20d4e3db160d",
            "date": "2019-01-02T07:39:15"
        }
    }
}

是的:管理员同意,我什至尝试将所有可用权限授予该应用并同意,但我仍然收到相同的消息。您是否知道我如何验证令牌或获取更多信息?

1 个答案:

答案 0 :(得分:2)

看来您的AAD应用程序配置不正确-要读取Outlook邮件,您需要具有Mail.Read权限。您可以从页面的“验证令牌输入”部分中进行检查(在屏幕截图中显示“正在加载”)。它看起来应类似于以下内容(配置了不同的权限)。 另外,您可以尝试在“身份”下拉列表中使用“来自请求的客户端”选项。

enter image description here

无论何时更改权限范围,都应通过在浏览器中访问此URL并接受访问要求来重新同意该应用程序:https://<yourfunctionapphost>.azurewebsites.net/.auth/login/aad?prompt=consent