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

问题描述 投票:0回答:1

我有一个实现azure移动SDK的android应用(com。microsoft。azure:azure-mobile-android:3.5.1@aar)在我的应用中,我使用带有刷新令牌的Google身份验证方法(如Azure Mobile Apps documentation中所述)。身份验证已经运行了将近两年。在最近10天(未进行任何更改)中,如果最近一次刷新是在60分钟或更早之前进行的,我的用户将无法再刷新其身份验证令牌。仅在调用时间少于1小时时刷新才会成功。如果刷新失败(通常如此),我必须强制用户使用Google同意屏幕再次登录,以获取新令牌。以前没有发生过,因为令牌甚至可以在上次刷新后几天刷新。有什么事吗我的Azure服务计划的类型为D1:共享。

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

Google身份验证刷新失败。刷新失败,出现401未经授权错误。凭证不再有效。

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

HTTP错误401.83-未经授权,您没有查看此目录或页面的权限。最可能的原因:经过身份验证的用户无权访问处理该请求所需的资源。可以尝试的操作:创建跟踪规则以进行跟踪对该HTTP状态代码的请求失败。

这是我的身份验证方法:

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); 
}

这是我遵循Mobile Apps文档的刷新令牌方法:

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门户中的身份验证设置:enter image description here

android azure-mobile-services google-authentication
1个回答
0
投票

[Azure App Service身份验证/授权功能似乎对令牌刷新的默认值进行了回归(以前是72小时,现在没有设置,因此默认为1小时)。我们将在即将发布的版本(接下来的几周)中解决此问题。

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

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

  2. 导航到订阅>(subName)> resourceGroups>(resourceGroupName)>提供程序> Microsoft.Web>网站>(siteName)>配置> authSettings。

  3. 点击编辑

  4. 将“ tokenRefreshExtensionHours”设置为72。

  5. Click PUT

这应该恢复原来的行为,即使将默认值改回72小时也仍然可以使用。

© www.soinside.com 2019 - 2024. All rights reserved.