Приложение флаттера с oid c, работающим на android 7, но не работающим на v9 и v10 - PullRequest
1 голос
/ 02 марта 2020

Приложение флаттера с Keycloak в качестве UAA, работающее с android версией 7, но в android 9, 10 после успешного входа в приложение keycloak выдает ошибку

Ниже приведен мой фрагмент кода:

import 'package:flutter_appauth/flutter_appauth.dart';
Future<bool> oidcLogin() async {
  print("entering oidclogin.........");
  FlutterAppAuth appAuth = FlutterAppAuth();
  final TokenResponse result = await appAuth.authorizeAndExchangeCode(
    AuthorizationTokenRequest(CLIENT_ID, REDIRECT_URL,
        serviceConfiguration: AuthorizationServiceConfiguration(
            AUTHORIZATION_END_POINT, TOKEN_END_POINT),
        scopes: [SCOPES],
        allowInsecureConnections: true),
  );
  return true;
}

Ниже приведена ошибка

Error:

PlatformException(authorize_and_exchange_code_failed, Failed to authorize: [error: null, description: Network error], null)

Stack trace:

#0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
#1 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321:33)

#2 MethodChannelFlutterAppAuth.authorizeAndExchangeCode (package:flutter_appauth_platform_interface/src/method_channel_flutter_appauth.dart:31:57)
#3 FlutterAppAuth.authorizeAndExchangeCode (package:flutter_appauth/src/flutter_appauth.dart:7:44)
#4 oidcLogin (package:taskManagementApp/services/oidc-connector.dart:24:46)
#5 _SplashScreenState.tryAccessToken (package:taskManagementApp/pages/splashScreen.dart:174:11)
#6 _SplashScreenState.navigationPage (package:taskManagementApp/pages/splashScreen.dart:97:22)

#7 _rootRun (dart:async/zone.dart:1122:38)
#8 _CustomZone.run (dart:async/zone.dart:1023:19)
#9 _CustomZone.runGuarded (dart:async/zone.dart:925:7)
#10 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:965:23)
#11 _rootRun (dart:async/zone.dart:1126:13)
#12 _CustomZone.run (dart:async/zone.dart:1023:19)
#13 _CustomZone.bindCallback. (dart:async/zone.dart:949:23)
#14 Timer._createTimer. (dart:async-patch/timer_patch.dart:23:15)
#15 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:384:19)
#16 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:418:5)
#17 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)

Device parameters:

id: QP1A.190711.020
androidId: fd3b98bfb6a914f4
board: exynos7904
bootloader: M205FDDU3CSL5
brand: samsung
device: m20lte
display: QP1A.190711.020.M205FDDU3CSL5
fingerprint: samsung/m20ltedd/m20lte:10/QP1A.190711.020/M205FDDU3CSL5:user/release-keys
hardware: exynos7904
host: SWDH2815
isPsychicalDevice: true
manufacturer: samsung
model: SM-M205F
product: m20ltedd
tags: release-keys
type: user
versionBaseOs:
versionCodename: REL
versionIncremental: M205FDDU3CSL5
versionPreviewSdk: 0
versionRelase: 10
versionSdk: 29
versionSecurityPatch: 2019-12-01

Я проверил на keycloak, сеанс пользователя успешно создан. Но внутри исключения бросания кода flutter_appauth.

C:\flutter\bin\flutter.bat doctor --verbose
[√] Flutter (Channel stable, v1.12.13+hotfix.8, on Microsoft Windows [Version 10.0.17763.1039], locale en-IN)
    • Flutter version 1.12.13+hotfix.8 at C:\flutter
    • Framework revision 0b8abb4724 (3 weeks ago), 2020-02-11 11:44:36 -0800
    • Engine revision e1e6ced81d
    • Dart version 2.7.0
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at C:\Users\avs02\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.3
    • Java binary at: C:\Program Files\Android\Android Studio1\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b03)
    • All Android licenses accepted.
[√] Android Studio (version 3.5)
    • Android Studio at C:\Program Files\Android\Android Studio1
    • Flutter plugin version 43.0.1
    • Dart plugin version 191.8593
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b03)
[√] VS Code, 64-bit edition (version 1.24.1)
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension version 2.21.1
[√] Connected device (1 available)
    • SM J600G • 52006fac59e36583 • android-arm • Android 9 (API 28)
• No issues found!
Process finished with exit code 0

Пожалуйста, помогите мне, я придерживался этого за последние 2 недели.

1 Ответ

0 голосов
/ 10 марта 2020

Я решил это. Сначала изменили метод authorizeAndExchangeCode для отдельного вызова метода авторизации и токена. Это показывает правильную трассировку стека ошибок.

Ошибка из-за неиспользования конечной точки URL https keycloak. Настроенный сервер для ssl и используемый подписанный сертификат.

Загруженный сертификат

echo "" | openssl s_client -host phoenixelectricals.in -port 443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > phoenixelectricals.pem

В AndroidManifest. xml добавлена ​​следующая запись

<application
        .....
        android:networkSecurityConfig="@xml/network_security_config">

network_security_config. xml содержит следующую настройку

<network-security-config>
    <base-config>
        <trust-anchors>
            <!-- Trust preinstalled CAs -->
            <certificates src="system" />
            <!-- Additionally trust user added CAs -->
            <certificates src="user" />
        </trust-anchors>
    </base-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">phoenixelectricals.in</domain>
        <trust-anchors>
            <certificates src="@raw/phoenixelectricals"/>
        </trust-anchors>
    </domain-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="@raw/phoenixelectricals"/>
        </trust-anchors>
    </debug-overrides>
</network-security-config>
...