AcquireTokenSilentAsync не работает, потому что у ConfidentialClientApplication нет пользователей - PullRequest
0 голосов
/ 02 мая 2018

У меня проблема с методом AcquireTokenSilentAsync, и я надеялся, что кто-нибудь может мне помочь.

В приведенном ниже методе я пытаюсь использовать метод AcquireTokenSilentAsync, чтобы я мог использовать его позже для вызова API-интерфейса graph в Microsoft. К сожалению, свойство Users ConfidentialClientApplication пусто, в результате чего cca.AcquireTokenSilentAsync завершается ошибкой, так как он требует первого пользователя в параметре, вызывая cca.Users.First().

public async Task<string> GetUserAccessTokenAsync()
    {
        string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
        HttpContextWrapper httpContext = new HttpContextWrapper(HttpContext.Current);
        TokenCache userTokenCache = new SessionTokenCache(signedInUserID, httpContext).GetMsalCacheInstance();

        ConfidentialClientApplication cca = new ConfidentialClientApplication(
            appId, 
            redirectUri,
            new ClientCredential(appSecret),
            userTokenCache,
            null);

        try
        {
            AuthenticationResult result = await cca.AcquireTokenSilentAsync(scopes.Split(new char[] { ' ' }), cca.Users.First());
            return result.AccessToken;
        }

        // Unable to retrieve the access token silently.
        catch (Exception)
        {
            HttpContext.Current.Request.GetOwinContext().Authentication.Challenge(
                new AuthenticationProperties() { RedirectUri = "/" },
                OpenIdConnectAuthenticationDefaults.AuthenticationType);

            throw new ServiceException(
                new Error
                {
                    Code = GraphErrorCode.AuthenticationFailure.ToString(),
                    Message = Resource.Error_AuthChallengeNeeded,
                });
        }
    }
}

Я не уверен, почему ConfidentialClientApplication не содержит пользователей, так как вход в систему при запуске приложения работает правильно. Я использую только UseCookieAuthentication и UseOpenIdConnectAuthentication при запуске.

Я надеюсь, что любой может помочь мне с этой проблемой!

...