如何为服务器到服务器调用正确更新 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 来获取新的访问令牌。
在我的场景中,用户授权我的 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 来获取新的访问令牌。