Итак, у нас есть приложение Ionic Angular для Android и iOS. Мы используем пакет angular-oauth2-oidc с нашим серверным клоаком для аутентификации пользователей. Сегодня мы заметили, что вход в систему в версии нашего приложения для Android не работает (мы не знаем, как долго это не работает). Мы протестировали обе платформы (код один и тот же), и iOS работает нормально, но Android не работает с токеном.
Пользователь нажимает кнопку для входа в Google или Facebook.
Приложение открывается в браузере приложения @capacitor/browser с помощью веб-сайта keycloak.
Пользователь может выбирать между входом в систему с помощью Google, Facebook или просто вводом имени пользователя и пароля. >
После его выбора keycloak перенаправляет пользователя в приложение.
Если метод токена hasValidToken() возвращает true, то поток приложения будет перенаправлять пользователя на экраны других приложений.
В чем проблема на Android, но на iOS работает нормально?
Выше 1, 2, 3, 4 шага работают нормально
Когда приложение возвращается после перенаправления, hasValidToken() всегда возвращает false.
Пользователь не перенаправляется на другие экраны приложения (экраны для аутентифицированного пользователя)
Когда пользователь снова нажимает кнопку входа в Google или Facebook, процесс повторяется без шага 3, поскольку keycloak знает, что этот пользователь уже вошел в систему, поэтому выполняется перенаправление в приложение
После приложение перенаправления иногда свернуто (не всегда, и в logcat и консоли инструментов разработки не видно никаких ошибок или ошибок js)
Все должно работать нормально, так как оно работает для iOS. Прежде чем мы это заметили, все работало нормально, и в течение двух лет в этой части приложения не было внесено никаких изменений в код.
ОС: Android
Браузер: приложение Ionic (@capacitor/browser используется для открытия keycloak из методов oauth)
Версия [например. 22]: "angular-oauth2-oidc": "^15.0.1"
Инициализация плагина выполняется в приложении .module.ts вот так:
А также у нас есть метод authOnAppInit, который запускается при инициализации приложения в app.comComponent.ts, чтобы проверить, вошел ли пользователь уже в систему. Представленные здесь журналы консоли предназначены только для устранения этой проблемы.
Мы отлаживали его для несколько часов, и, как я писал выше, ни в одном из этих методов плагина нет ошибок или даже собственных ошибок из Android Logcat.
Есть идеи?
Итак, у нас есть приложение Ionic Angular для Android и iOS. Мы используем пакет angular-oauth2-oidc с нашим серверным клоаком для аутентификации пользователей. Сегодня мы заметили, что вход в систему в версии нашего приложения для Android не работает (мы не знаем, как долго это не работает). Мы протестировали обе платформы (код один и тот же), и iOS работает нормально, но Android не работает с токеном. [list] [*]Пользователь нажимает кнопку для входа в Google или Facebook. Приложение открывается в браузере приложения @capacitor/browser с помощью веб-сайта keycloak. [*]Пользователь может выбирать между входом в систему с помощью Google, Facebook или просто вводом имени пользователя и пароля. > [*]После его выбора keycloak перенаправляет пользователя в приложение. [*]Если метод токена hasValidToken() возвращает true, то поток приложения будет перенаправлять пользователя на экраны других приложений. [/list] [b]В чем проблема на Android, но на iOS работает нормально?[/b] [list] [*]Выше 1, 2, 3, 4 шага работают нормально [*]Когда приложение возвращается после перенаправления, hasValidToken() всегда возвращает false. [*]Пользователь не перенаправляется на другие экраны приложения (экраны для аутентифицированного пользователя) [*]Когда пользователь снова нажимает кнопку входа в Google или Facebook, процесс повторяется без шага 3, поскольку keycloak знает, что этот пользователь уже вошел в систему, поэтому выполняется перенаправление в приложение [*] После приложение перенаправления иногда свернуто (не всегда, и в logcat и консоли инструментов разработки не видно никаких ошибок или ошибок js) [/list] Все должно работать нормально, так как оно работает для iOS. Прежде чем мы это заметили, все работало нормально, и в течение двух лет в этой части приложения не было внесено никаких изменений в код. [list] [*]ОС: Android [*]Браузер: приложение Ionic (@capacitor/browser используется для открытия keycloak из методов oauth) [*]Версия [например. 22]: "angular-oauth2-oidc": "^15.0.1" [/list] [list] [*]Инициализация плагина выполняется в приложении .module.ts вот так: [/list] [code]const authConfig: AuthConfig = { issuer: 'issuer url here', requireHttps: true, redirectUri: 'our redirect uri', clientId: 'our client id', responseType: 'code', revocationEndpoint: 'revoke endpoint', showDebugInformation: true, useSilentRefresh: true, openUri: (uri) => { Browser.open({ url: uri }); }, };
}); }); }; [/code] [list] [*]А также у нас есть метод authOnAppInit, который запускается при инициализации приложения в app.comComponent.ts, чтобы проверить, вошел ли пользователь уже в систему. Представленные здесь журналы консоли предназначены только для устранения этой проблемы. [/list] [code] authOnAppInit = (): void => { this.oauthService .loadDiscoveryDocumentAndTryLogin({ onTokenReceived: (info) => { console.log('Token received callback:', info); }, onLoginError: (error) => { console.error('Login error:', error); }, }) .then((result) => { this.hasValidAccessToken = this.oauthService.hasValidAccessToken(); const accessToken = this.oauthService.getAccessToken(); const accessTokenExpiration = this.oauthService.getAccessTokenExpiration();
this.loggerService.sendLog('OAuth event', { event }); this.hasValidAccessToken = this.oauthService.hasValidAccessToken(); if (this.hasValidAccessToken) { this.handleAfterLoginActions(); } }); }; [/code] [b]Итак, еще раз — для Android приведенные выше журналы консоли:[/b] [list] [*]Попробуйте войти результат — true (насколько я понимаю, это означает, что вход в систему выполнен успешно) [*]Токен доступа — ноль [*]Срок действия токена доступа — ноль Имеет действительный токен доступа — ложь [*]Получено событие OAuth — OAuthSuccessEvent {type: 'discovery_document_loaded', info: {...} [/list] Мы отлаживали его для несколько часов, и, как я писал выше, ни в одном из этих методов плагина нет ошибок или даже собственных ошибок из Android Logcat. Есть идеи?