aws-amplify / amplify-flutter

A declarative library with an easy-to-use interface for building Flutter applications on AWS.
https://docs.amplify.aws
Apache License 2.0
1.31k stars 241 forks source link

Get JWT Token #2066

Closed saswat-pcode closed 2 years ago

saswat-pcode commented 2 years ago

Description

Hi I am confused how could I get the jwt token .

Categories

Steps to Reproduce

No response

Screenshots

No response

Platforms

Android Device/Emulator API Level

No response

Environment

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.0.5, on macOS 12.5.1 21G83 darwin-x64, locale en-IN)
[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0-rc5)
[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.2)
[✓] VS Code (version 1.70.2)
[✓] Connected device (3 available)
[✓] HTTP Host Availability

Dependencies

Dart SDK 2.17.6
Flutter SDK 3.0.5

dependencies:
- app_api 1.0.0 [dio encrypt freezed_annotation json_annotation flutter_pretty_dio_logger dartz]
- amplify_auth_cognito 0.6.6 [amplify_auth_cognito_android amplify_auth_cognito_ios amplify_core aws_common collection flutter meta plugin_platform_interface]
- amplify_flutter 0.6.6 [amplify_core amplify_datastore_plugin_interface amplify_flutter_android amplify_flutter_ios aws_common collection flutter meta plugin_platform_interface]
- bot_toast 4.0.3 [flutter]
- cupertino_icons 1.0.5
- dartz 0.10.1
- dio 4.0.6 [http_parser path]
- firebase_analytics 9.3.1 [firebase_analytics_platform_interface firebase_analytics_web firebase_core firebase_core_platform_interface flutter]
- firebase_auth 3.6.4 [firebase_auth_platform_interface firebase_auth_web firebase_core firebase_core_platform_interface flutter meta]
- firebase_core 1.20.1 [firebase_core_platform_interface firebase_core_web flutter meta]
- firebase_crashlytics 2.8.7 [firebase_core firebase_core_platform_interface firebase_crashlytics_platform_interface flutter stack_trace]
- firebase_messaging 12.0.2 [firebase_core firebase_core_platform_interface firebase_messaging_platform_interface firebase_messaging_web flutter meta]
- flutter 0.0.0 [characters collection material_color_utilities meta vector_math sky_engine]
- flutter_bloc 8.1.1 [flutter bloc provider]
- flutter_local_notifications 9.7.1 [clock flutter flutter_local_notifications_linux flutter_local_notifications_platform_interface timezone]
- flutter_svg 1.1.3 [flutter meta path_drawing vector_math xml]
- freezed_annotation 2.1.0 [collection json_annotation meta]
- json_annotation 4.6.0 [meta]
- onboarding 3.1.0 [flutter]
- provider 6.0.3 [collection flutter nested]
- shared_preferences 2.0.15 [flutter shared_preferences_android shared_preferences_ios shared_preferences_linux shared_preferences_macos shared_preferences_platform_interface shared_preferences_web shared_preferences_windows]
- url_launcher 6.1.5 [flutter url_launcher_android url_launcher_ios url_launcher_linux url_launcher_macos url_launcher_platform_interface url_launcher_web url_launcher_windows]
- vrouter 1.2.1 [flutter url_strategy url_launcher move_to_background]
- walletconnect_dart 0.0.11 [web_socket_channel uuid cryptography convert json_annotation stack_trace]
- web3dart 2.3.5 [build build_config dart_style code_builder path built_collection pointycastle convert meta http js uuid typed_data stream_channel stream_transform json_rpc_2 collection]
- webview_flutter 3.0.4 [flutter webview_flutter_android webview_flutter_platform_interface webview_flutter_wkwebview]

transitive dependencies:
- _fe_analyzer_shared 46.0.0 [meta]
- amplify_auth_cognito_android 0.6.6 [flutter]
- amplify_auth_cognito_ios 0.6.6 [amplify_core flutter]
- amplify_core 0.6.6 [aws_common collection flutter intl json_annotation meta plugin_platform_interface uuid]
- amplify_datastore_plugin_interface 0.6.6 [amplify_core collection flutter meta]
- amplify_flutter_android 0.6.6 [flutter]
- amplify_flutter_ios 0.6.6 [amplify_core flutter]
- analyzer 4.6.0 [_fe_analyzer_shared collection convert crypto glob meta package_config path pub_semver source_span watcher yaml]
- args 2.3.1
- asn1lib 1.1.0
- async 2.8.2 [collection meta]
- aws_common 0.1.1 [async collection http meta stream_transform uuid]
- bloc 8.1.0 [meta]
- boolean_selector 2.1.0 [source_span string_scanner]
- build 2.3.0 [analyzer async convert crypto glob logging meta path]
- build_config 1.1.0 [checked_yaml json_annotation path pubspec_parse yaml]
- built_collection 5.1.1
- built_value 8.4.0 [built_collection collection fixnum meta]
- characters 1.2.0
- charcode 1.3.1
- checked_yaml 2.0.1 [json_annotation source_span yaml]
- clock 1.1.0
- code_builder 4.2.0 [built_collection built_value collection matcher meta]
- collection 1.16.0
- convert 3.0.2 [typed_data]
- crypto 3.0.2 [typed_data]
- cryptography 2.0.5 [collection crypto fixnum js meta typed_data]
- dart_style 2.2.3 [analyzer args path pub_semver source_span]
- dbus 0.7.7 [args ffi meta xml]
- encrypt 5.0.1 [args asn1lib clock collection crypto pointycastle]
- fake_async 1.3.0 [clock collection]
- ffi 2.0.1
- file 6.1.2 [meta path]
- firebase_analytics_platform_interface 3.3.1 [firebase_core flutter meta plugin_platform_interface]
- firebase_analytics_web 0.4.2+1 [firebase_analytics_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins js]
- firebase_auth_platform_interface 6.5.4 [collection firebase_core flutter meta plugin_platform_interface]
- firebase_auth_web 4.2.4 [firebase_auth_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins http_parser intl js meta]
- firebase_core_platform_interface 4.5.0 [collection flutter flutter_test meta plugin_platform_interface]
- firebase_core_web 1.7.1 [firebase_core_platform_interface flutter flutter_web_plugins js meta]
- firebase_crashlytics_platform_interface 3.2.13 [collection firebase_core flutter meta plugin_platform_interface]
- firebase_messaging_platform_interface 4.1.1 [firebase_core flutter meta plugin_platform_interface]
- firebase_messaging_web 3.1.1 [firebase_core firebase_core_web firebase_messaging_platform_interface flutter flutter_web_plugins js meta]
- fixnum 1.0.1
- flutter_local_notifications_linux 0.5.1 [flutter flutter_local_notifications_platform_interface dbus path xdg_directories]
- flutter_local_notifications_platform_interface 5.0.0 [flutter plugin_platform_interface]
- flutter_pretty_dio_logger 2.0.1 [dio]
- flutter_test 0.0.0 [flutter test_api path fake_async clock stack_trace vector_math async boolean_selector characters charcode collection matcher material_color_utilities meta source_span stream_channel string_scanner term_glyph]
- flutter_web_plugins 0.0.0 [flutter js characters collection material_color_utilities meta vector_math]
- glob 2.1.0 [async collection file path string_scanner]
- http 0.13.5 [async http_parser meta path]
- http_parser 4.0.1 [collection source_span string_scanner typed_data]
- intl 0.17.0 [clock path]
- js 0.6.4
- json_rpc_2 3.0.2 [stack_trace stream_channel]
- logging 1.0.2
- matcher 0.12.11 [stack_trace]
- material_color_utilities 0.1.4
- meta 1.7.0
- move_to_background 1.0.2 [flutter]
- nested 1.0.0 [flutter]
- package_config 2.1.0 [path]
- path 1.8.1
- path_drawing 1.0.1 [vector_math meta path_parsing flutter]
- path_parsing 1.0.1 [vector_math meta]
- path_provider_linux 2.1.7 [ffi flutter path path_provider_platform_interface xdg_directories]
- path_provider_platform_interface 2.0.4 [flutter platform plugin_platform_interface]
- path_provider_windows 2.1.2 [ffi flutter path path_provider_platform_interface win32]
- petitparser 5.0.0 [meta]
- platform 3.1.0
- plugin_platform_interface 2.1.2 [meta]
- pointycastle 3.6.1 [collection convert js]
- process 4.2.4 [file path platform]
- pub_semver 2.1.1 [collection meta]
- pubspec_parse 1.2.0 [checked_yaml collection json_annotation pub_semver yaml]
- shared_preferences_android 2.0.12 [flutter shared_preferences_platform_interface]
- shared_preferences_ios 2.1.1 [flutter shared_preferences_platform_interface]
- shared_preferences_linux 2.1.1 [file flutter path path_provider_linux path_provider_platform_interface shared_preferences_platform_interface]
- shared_preferences_macos 2.0.4 [flutter shared_preferences_platform_interface]
- shared_preferences_platform_interface 2.0.0 [flutter]
- shared_preferences_web 2.0.4 [flutter flutter_web_plugins shared_preferences_platform_interface]
- shared_preferences_windows 2.1.1 [file flutter path path_provider_platform_interface path_provider_windows shared_preferences_platform_interface]
- sky_engine 0.0.99
- source_span 1.8.2 [collection path term_glyph]
- stack_trace 1.10.0 [path]
- stream_channel 2.1.0 [async]
- stream_transform 2.0.0
- string_scanner 1.1.0 [charcode source_span]
- term_glyph 1.2.0
- test_api 0.4.9 [async boolean_selector collection meta source_span stack_trace stream_channel string_scanner term_glyph matcher]
- timezone 0.8.0 [path]
- typed_data 1.3.1 [collection]
- url_launcher_android 6.0.17 [flutter url_launcher_platform_interface]
- url_launcher_ios 6.0.17 [flutter url_launcher_platform_interface]
- url_launcher_linux 3.0.1 [flutter url_launcher_platform_interface]
- url_launcher_macos 3.0.1 [flutter url_launcher_platform_interface]
- url_launcher_platform_interface 2.1.0 [flutter plugin_platform_interface]
- url_launcher_web 2.0.13 [flutter flutter_web_plugins url_launcher_platform_interface]
- url_launcher_windows 3.0.1 [flutter url_launcher_platform_interface]
- url_strategy 0.2.0 [flutter_web_plugins]
- uuid 3.0.6 [crypto]
- vector_math 2.1.2
- watcher 1.0.1 [async path]
- web_socket_channel 2.2.0 [async crypto stream_channel]
- webview_flutter_android 2.9.5 [flutter webview_flutter_platform_interface]
- webview_flutter_platform_interface 1.9.1 [flutter meta plugin_platform_interface]
- webview_flutter_wkwebview 2.9.3 [flutter path webview_flutter_platform_interface]
- win32 2.7.0 [ffi]
- xdg_directories 0.2.0+1 [meta path process]
- xml 6.1.0 [collection meta petitparser]
- yaml 3.1.1 [collection source_span string_scanner]

Device

emulator pixel

OS

Android

Deployment Method

Amplify CLI

CLI Version

No response

Additional Context

No response

Amplify Config

{ "UserAgent": "aws-amplify-cli/2.0", "Version": "1.0", "auth": { "plugins": { "awsCognitoAuthPlugin": { "UserAgent": "aws-amplify-cli/0.1.0", "Version": "0.1.0", "IdentityManager": { "Default": {} }, "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "", "Region": "ap-southeast-1" } } }, "CognitoUserPool": { "Default": { "PoolId": "", "AppClientId": "", "Region": "" } }, "Auth": { "Default": { "authenticationFlowType": "USER_SRP_AUTH", "socialProviders": [], "usernameAttributes": [ "EMAIL" ], "signupAttributes": [ "EMAIL" ], "passwordProtectionSettings": { "passwordPolicyMinLength": 8, "passwordPolicyCharacters": [] }, "mfaConfiguration": "OPTIONAL", "mfaTypes": [ "TOTP" ], "verificationMechanisms": [ "EMAIL" ] } } } } } }''';

Jordan-Nelson commented 2 years ago

Hello @saswat-pcode - let me know if this doesn't answer your question - https://docs.amplify.aws/lib/auth/access_credentials/q/platform/flutter/

saswat-pcode commented 2 years ago

Thank you @Jordan-Nelson .

akotorri commented 1 year ago

@Jordan-Nelson for me it doesn’t work, because what I need is an authorisation key to send in the headers when I do the api call(outside of Amplify) and the example in the documentation doesn’t work for me, how should I proceed with this?

akotorri commented 1 year ago

I managed to get the idToken by doing this:

final result = await Amplify.Auth.fetchAuthSession(
        options: const auth.CognitoSessionOptions(getAWSCredentials: true),
      ) as auth.CognitoAuthSession;

var userPoolTokens = result.userPoolTokens!.idToken.raw;
naedx commented 5 months ago

I managed to get the idToken by doing this:

final result = await Amplify.Auth.fetchAuthSession(
        options: const auth.CognitoSessionOptions(getAWSCredentials: true),
      ) as auth.CognitoAuthSession;

var userPoolTokens = result.userPoolTokens!.idToken.raw;

An example like this deserves to be on the docs page [https://docs.amplify.aws/flutter/build-a-backend/graphqlapi/customize-authz-modes/#amazon-cognito-user-pools].

It explains several different options but stops just short of something like this:

await Amplify.addPlugin(
  AmplifyAPI(
    authProviders: const [
      CustomOIDCProvider()
    ],
  ),
);

...
class CustomOIDCProvider extends OIDCAuthProvider {
  const CustomOIDCProvider();

  @override
  Future<String?> getLatestAuthToken() async {
    final session = await Amplify.Auth.fetchAuthSession() as CognitoAuthSession;

    return session?.userPoolTokensResult?.value?.idToken?.raw;
  }
}
arulchezhiyan commented 2 months ago

I am unable to retrieve the JWT token in my Flutter application. When I use the code below to obtain the idToken for authorization in API headers, I receive a JSON Web Token that does not work with my API. Strangely, this issue does not occur in my native Android application, and I'm unsure why Flutter is having difficulties. Can anyone help me on the token issue?

Future fetchCognitoAuthSession() async { try { final cognitoPlugin = Amplify.Auth.getPlugin(AmplifyAuthCognito.pluginKey); final session = await cognitoPlugin.fetchAuthSession(); if (session.isSignedIn) { final refreshToken = session.userPoolTokensResult.value.refreshToken; safePrint("Current user's id token: ${session.userPoolTokensResult.value.idToken}"); return refreshToken; } else { safePrint('User is not signed in'); return ''; } } on AuthException catch (e) { safePrint('Error retrieving auth session: ${e.message}'); return ''; } }

Jordan-Nelson commented 2 months ago

@arulchezhiyan are you using the .raw getter or .encode method? Please see https://github.com/aws-amplify/amplify-flutter/issues/5023#issuecomment-2166559152 and if that does not answer your question please open a new issue and fill out the issue template. Thanks.