C# Microsoft Graph SDK-登录

C# Microsoft Graph SDK-登录,c#,winforms,microsoft-graph-api,C#,Winforms,Microsoft Graph Api,是否可以使用MS Graph只登录一次?目前,每当我调用graphServiceClient时,它都会要求我登录或选择已登录的用户。是否有任何方法可以避免选择登录用户的过程?提前谢谢 目前,我就是这样初始化graphService的 public static GraphServiceClient GetAuthenticatedClient() { GraphServiceClient graphClient = new GraphServiceClient(

是否可以使用MS Graph只登录一次?目前,每当我调用graphServiceClient时,它都会要求我登录或选择已登录的用户。是否有任何方法可以避免选择登录用户的过程?提前谢谢

目前,我就是这样初始化graphService的

    public static GraphServiceClient GetAuthenticatedClient()
    {
        GraphServiceClient graphClient = new GraphServiceClient(
            new DelegateAuthenticationProvider(
                async (requestMessage) =>
                {
                    string appID = ConfigurationManager.AppSettings["ida:AppId"];

                    PublicClientApplication PublicClientApp = new PublicClientApplication(appID);
                    string[] _scopes = new string[] { "Calendars.read", "Calendars.readwrite" };

                    AuthenticationResult authResult = null;
                    authResult = await PublicClientApp.AcquireTokenAsync(_scopes); //Opens Microsoft Login Screen    

                    // Append the access token to the request.
                    requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", authResult.AccessToken);
                }));
        return graphClient;
    }
现在,每当我使用标准SDK功能时,它都会要求我登录:

等待graphClient.Me.Events[testID].Request().UpdateAsync(x)

当我使用另一个函数时,它会再次询问我:


等待graphClient.Me.Events.Request().AddAsync(newEvent)是的,这是可能的<代码>AcquireTokenAsync始终触发登录。相反,您需要实现令牌缓存并使用
AcquireTokenSilentAsync
。有一个web应用程序示例。

嗨,Jason,谢谢你的回答,这对windows窗体应用程序也有效吗?@WilliamBotha你是如何学习本教程的令牌缓存使用方法的?嗨,AndrewTruckle。我们所做的就是利用注册中心。我们在登录时保存了令牌。这样我们就不会经常被提示登录。如果你有任何问题,请告诉我。@WilliamBotha你介意带我看看吗?我知道如何将值存储到注册表。但是在登录时使用注册表值等基本概念会有很大帮助。我这里有一个类似的问题,你也许能给出一个具体的答案@AndrewTruckle你想把它写在电子邮件里还是什么?