在我的场景中,用户授予我的AAD应用程序使用Microsoft Graph API在服务器进程中不时读取其电子邮件的权限。在用户授予权限时,我使用authContext.GetAuthorizationRequestURL和authContext.AcquireTokenByAuthorizationCodeAsync获取令牌。此后,每当我需要访问令牌时,我执行以下操作:
TokenCache tokenCache; // deserialized
AuthenticationContext authContext = CreateAuthContext(authority, tokenCache);
AuthenticationResult authResult = await authContext.AcquireTokenAsync(
resource,
new ClientCredential(clientId, clientKey));
return authResult.AccessToken;
不幸的是,使用生成的accesstoken调用MS Graph API会返回403(Forbidden)。
我得到的印象是我没有使用正确的信息调用AcquireToken *()的正确风格。有谁熟悉这种情况?
答案 0 :(得分:0)
问题中指示的AcquireTokenAsync重载将获取仅限app的令牌。接受ClientCredential和UserIdentifier参数的AcquireToken重载是需要的,但不幸的是,这样的重载不存在。
但是,您可以继续使用访问令牌直到它过期(使用AuthenticationResult.ExpiresOn检查),然后使用AuthenticationResult.RefreshToken和AcquireTokenByRefreshTokenAsync API来获取新的访问令牌。