如何为服务器到服务器调用正确更新 ADAL 身份验证令牌

How to correctly renew ADAL authentication token for Server to server call

在我的场景中,用户授权我的 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;

不幸地使用生成的访问令牌 returns 调用 MS Graph APIs 403(禁止访问)。

我觉得我没有用正确的信息调用正确的 AcquireToken*() 风格。有人熟悉这种情况吗?

问题中指出的 AcquireTokenAsync 重载将获取仅限应用程序的令牌。需要接受 ClientCredential 和 UserIdentifier 参数的 AcquireToken 重载,但不幸的是,这样的重载不存在。

但是,您可以继续使用访问令牌直到它过期(使用 AuthenticationResult.ExpiresOn 检查),然后使用 AuthenticationResult.RefreshToken 和 AcquireTokenByRefreshTokenAsync API 来获取新的访问令牌。