У меня проблема с методом 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
при запуске.
Я надеюсь, что любой может помочь мне с этой проблемой!