我有一个实现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 App Service身份验证/授权功能似乎对令牌刷新的默认值进行了回归(以前是72小时,现在没有设置,因此默认为1小时)。我们将在即将发布的版本(接下来的几周)中解决此问题。
同时,您可以通过以下步骤手动配置此值:
导航到订阅>(subName)> resourceGroups>(resourceGroupName)>提供程序> Microsoft.Web>网站>(siteName)>配置> authSettings。
点击编辑
将“ tokenRefreshExtensionHours”设置为72。
Click PUT
这应该恢复原来的行为,即使将默认值改回72小时也仍然可以使用。