我有一个Android应用程序实现了Azure移动SDK(com.microsoft.azure:azure-mobile-android:3.5.1@aar)。在我的应用程序中,我将Google身份验证方法与刷新令牌一起使用(如Azure Mobile Apps文档中所述) 。身份验证已经运行了将近两年。在最近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应用服务身份验证/授权功能在令牌刷新的默认值中具有回归(以前是72小时,现在没有设置,因此默认为1小时)。我们将在即将发布的版本(接下来的几周)中对此进行修复。
同时,您可以按照以下步骤手动配置该值:
导航到订阅>(子名称)> resourceGroups>(resourceGroupName)>提供程序> Microsoft.Web>站点>(siteName)>配置> authSettings。
点击编辑
将“ tokenRefreshExtensionHours”设置为72。
点击PUT
这样可以恢复以前的行为,即使将默认值改回72小时也仍然可以使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句