使用带有客户端凭据身份验证的Graph API创建自定义扩展

时间:2017-03-10 15:42:05

标签: azure active-directory microsoft-graph azure-ad-graph-api

我有一个.NET Web API,我用它来与Microsoft Graph和Azure AD进行一些交互。但是,当我尝试在用户上创建扩展时,它会返回Access Denied。

我知道可以从文档here中找到它,但它似乎对我不起作用。

对于API,我使用的是客户端凭据。因此,我的网络应用程序使用用户凭据对API进行身份验证,然后从API使用客户端对图表进行身份验证。

我在Azure AD上的应用将应用权限Read and Write Directory Data设置为true,因为它表明它需要位于用户扩展的文档中。

我知道我的令牌有效,因为我可以用它检索数据。

以下是我检索它的代码:

    private const string _createApprovalUrl = "https://graph.microsoft.com/beta/users/{0}/extensions";
    public static async Task<bool> CreateApprovalSystemSchema(string userId)
    {
        using(var client = new HttpClient())
        {
            using(var req = new HttpRequestMessage(HttpMethod.Post, _createApprovalUrl))
            {
                var token = await GetToken();
                req.Headers.Add("Authorization", string.Format("Bearer {0}", token));
                req.Headers.TryAddWithoutValidation("Content-Type", "application/json");
                var requestContent = JsonConvert.SerializeObject(new { extensionName = "<name>", id = "<id>", approvalLimit = "0" });
                req.Content = new StringContent(requestContent, Encoding.UTF8, "application/json");

                using(var response = await client.SendAsync(req))
                {
                    var content = await response.Content.ReadAsStringAsync();
                    ApprovalSystemSchema schema = JsonConvert.DeserializeObject<ApprovalSystemSchema>(content);
                    if(schema.Id == null)
                    {
                        return false;
                    }
                    return true;
                }
            }
        }
    }

是否有人可能对此有解决方法,或有关何时可行的信息?

谢谢,

1 个答案:

答案 0 :(得分:1)

我们看一下,看起来你有一个错误/代码行丢失了。您似乎正在制作完全请求:

POST https://graph.microsoft.com/beta/users/{0}/extensions

您似乎缺少用实际用户ID替换{0}的代码。如果您现在能够在用户上创建扩展程序,请进行修复并告诉我们。