为什么 Google 身份验证令牌刷新最近在 Android 的 Azure 移动应用程序 SDK 中不断失败

Why Google authentication token refresh keeps failing recently in Azure Mobile Apps SDK for Android

我有一个 android 应用程序实现了 azure 移动 SDK (com.microsoft.azure: azure-mobile-android:3.5.1@aar) 在我的应用程序中,我使用带有刷新令牌的 Google 身份验证方法(如 Azure Mobile Apps documentation 中所述)。 身份验证已经运行了将近 2 年。在过去的 10 天里(未进行任何更改),如果上次刷新是在 60 分钟或更长时间之前进行的,我的用户将无法再刷新他们的身份验证令牌。只有在 1 小时内调用刷新才会成功。如果刷新失败(这种情况经常发生),我必须强制用户使用 Google 同意屏幕再次登录以获得新令牌。以前不会发生这种情况,因为即使在上次刷新几天后,令牌也可能会刷新。有什么问题吗?我的 Azure 服务计划类型为 D1:共享。

如果在上次刷新后超过 1 小时调用 refreshUser() 方法,用户会在其 android 设备中看到此错误消息:

Google authentication refresh failed.Refresh failed with a 401 Unauthorized error. Credentials are no longer valid.

在日志流中(在 portal.azure 中)我看到以下消息:

HTTP Error 401.83 - Unauthorized You do not have permission to view this directory or page.Most likely causes:The authenticated user does not have access to a resource needed to process the request.Things you can try:Create a tracing rule to track failed requests for this HTTP status code.

这是我的身份验证方法:

private void authenticate() {
// Sign in using the Google provider.
HashMap parameters = new HashMap<>();
parameters.put("access_type", "offline");
parameters.put("prompt", "consent");
mClient.login(MobileServiceAuthenticationProvider.Google, url_scheme_of_your_app, GOOGLE_LOGIN_REQUEST_CODE, parameters); 
}

这是我遵循移动应用程序文档的刷新令牌方法:

private void refreshToken(){mClient.refreshUser(new UserAuthenticationCallback() {
    @Override
    public void onCompleted(MobileServiceUser user, Exception exception, ServiceFilterResponse response) {
    if (user != null && exception == null) {
    /*refresh succeeded*/
    } else { 
    /*refresh failed*/
    String message = "+"%s authentication refresh failed.Error: %s", "Google",exception.getMessage())";}}}); }

Azure 门户中的身份验证设置:

看起来 Azure 应用服务 Authentication/Authorization 功能在令牌刷新的默认值中有回归(以前是 72 小时,现在没有设置,所以默认为 1 小时).我们将在即将发布的版本(接下来的几周)中修复此问题。

同时,您可以通过以下步骤手动配置此值:

  1. 导航到 https://resources.azure.com

  2. 导航到订阅 > (subName) > resourceGroups > (resourceGroupName) > providers > Microsoft.Web > sites > (siteName) > config > authSettings.

  3. 点击编辑

  4. 将"tokenRefreshExtensionHours"设为72。

  5. 点击放置

这应该会恢复原来的行为,即使我们将默认值改回 72 小时,它仍然会起作用。