从MS在示例应用程序中创建GraphServiceClient时出错

时间:2020-11-12 13:06:13

标签: microsoft-graph-api

我正试图让MS示例应用程序适用于Graph Beta Webhooks API,并且由于我不得不修改某些示例代码以删除一些过时的代码而导致当前崩溃,而且我不确定替换为。 这是功能:

    public static GraphServiceClient GetAuthenticatedClient(string userId, string redirect)
    {
        var graphClient = new GraphServiceClient(
            new DelegateAuthenticationProvider(
                async (request) =>
                {
                    var tokenCache = new SampleTokenCache(userId);

                    // Obsolete code
                    //var cca = new ConfidentialClientApplication(Startup.ClientId, redirect, new ClientCredential(Startup.ClientSecret), tokenCache.GetMsalCacheInstance(), null);
                    // New code
                    var cca2 = ConfidentialClientApplicationBuilder.Create(Startup.ClientId).WithClientSecret(Startup.ClientSecret).WithRedirectUri(redirect).Build();
                    // Question - how do I pass the tokenCache in here as the userTokenCache ?

                    // ERROR - With the new code this returns zero accounts presuambly because I haven't passed in a userTokenCache
                    var accounts = await cca2.GetAccountsAsync();

                    // Obsolete code
                    //var authResult = await cca.AcquireTokenSilentAsync(Startup.Scopes, accounts.First());
                    // New code
                    var authResult2 = await cca2.AcquireTokenSilent(Startup.Scopes, accounts.First()).ExecuteAsync();

                    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult2.AccessToken);
                }));

        return graphClient;
    }

如果我使用ConfidentialClientClientApplicationBuilder,则GetAccountsAsync()返回一个空集合,我认为这是因为我尚未将tokenCache传递给构建器。有人知道如何解决此代码,还是有人让示例应用程序正常工作? 这是示例应用程序的链接:

https://docs.microsoft.com/en-us/samples/microsoftgraph/aspnet-webhooks-rest-sample/microsoft-graph-aspnet-webhooks/

谢谢 埃德·詹姆斯

1 个答案:

答案 0 :(得分:0)

您需要login as user,以便将一个帐户添加到令牌缓存中,该帐户可以调用tokenCache.GetMsalCacheInstance()方法。