具有 Windows Azure oauth2 登录的 Flutter 应用程序多平台应用程序
Flutter app multiplatform app with Windows Azure oauth2 login
我们正在开发一个 Flutter 项目,我们希望通过 Windows Azure Oauth2 身份验证访问数据,该身份验证应该适用于所有主要平台(至少大多数平台)。关键平台是 android、ios 和 web,但最好还有 windows-native、linux、fuchsia 等。
问题主要是,我们(还)没有找到任何支持 web 平台(edge,chrome,safari +++)的 flutter 库,它能按预期工作。
我们看到许多(通常是较旧的)帖子说网络方法尚不可用。
是否有任何支持所有的库,有没有人有一个示例(在 github(?) 上针对 Azure 完全“开箱即用”,即)任何人都知道,这是可用的最近 ?
您可以将包 msal_js for the web, and aad_oauth 用于 ios 和 android。
要将这些组合到一个多平台项目中,您需要亲自动手。
一个可能的解决方案:
在您的项目中创建 4 个文件:auth_manager_stub.dart、iAuth_manager.dart、auth_manager_native.dart、auth_manager_web.dart。
//auth_manager_stub.dart
import 'auth_manager.dart';
AuthManager getManager() =>
throw UnsupportedError('Cannot create an auth manager');
我们的接口文件。
import 'auth0_manager_stub.dart'
if (dart.library.io) 'package:aad_oauth/aad_oauth.dart'
if (dart.library.js) 'package:msal_js/msal_js.dart';
abstract class AuthManager {
static AuthManager? _instance;
static AuthManager? get instance {
_instance ??= getManager();
return _instance;
}
Future<User> login();
}
我们的 auth_manager_native.dart-文件将如下所示:
import 'package:aad_oauth/aad_oauth.dart';
import 'package:aad_oauth/model/config.dart';
import 'iAuth_manager.dart';
//other imports
AuthManager getManager() => Auth0Manager();
class Auth0Manager extends AuthManager {
String? accessToken;
@override
Future<void> Login() async {
//some native code....
}
}
和我们的 web.dart-文件是这样的:
import 'package:msal_js/msal_js.dart';
import 'auth_manager.dart';
import 'dart:js' as js;
import 'iAuth_manager.dart';
AuthManager getManager() => Auth0ManagerForWeb();
class Auth0ManagerForWeb extends AuthManager {
@override
Future<String> Login() async {
//web-specific code here
}
}
只需在特定于平台的文件中为每个平台实施不同的登录方法。
在我们的 main.dart 文件中,我们可以这样做:
void login() async {
AuthManager.instance?.Login();
}
我们将根据我们使用的设备调用特定策略。
各个库的使用以及我们如何实现它们不在这个问题范围内。
归功于this medium article
和 this
我们正在开发一个 Flutter 项目,我们希望通过 Windows Azure Oauth2 身份验证访问数据,该身份验证应该适用于所有主要平台(至少大多数平台)。关键平台是 android、ios 和 web,但最好还有 windows-native、linux、fuchsia 等。
问题主要是,我们(还)没有找到任何支持 web 平台(edge,chrome,safari +++)的 flutter 库,它能按预期工作。
我们看到许多(通常是较旧的)帖子说网络方法尚不可用。
是否有任何支持所有的库,有没有人有一个示例(在 github(?) 上针对 Azure 完全“开箱即用”,即)任何人都知道,这是可用的最近 ?
您可以将包 msal_js for the web, and aad_oauth 用于 ios 和 android。
要将这些组合到一个多平台项目中,您需要亲自动手。
一个可能的解决方案:
在您的项目中创建 4 个文件:auth_manager_stub.dart、iAuth_manager.dart、auth_manager_native.dart、auth_manager_web.dart。
//auth_manager_stub.dart
import 'auth_manager.dart';
AuthManager getManager() =>
throw UnsupportedError('Cannot create an auth manager');
我们的接口文件。
import 'auth0_manager_stub.dart'
if (dart.library.io) 'package:aad_oauth/aad_oauth.dart'
if (dart.library.js) 'package:msal_js/msal_js.dart';
abstract class AuthManager {
static AuthManager? _instance;
static AuthManager? get instance {
_instance ??= getManager();
return _instance;
}
Future<User> login();
}
我们的 auth_manager_native.dart-文件将如下所示:
import 'package:aad_oauth/aad_oauth.dart';
import 'package:aad_oauth/model/config.dart';
import 'iAuth_manager.dart';
//other imports
AuthManager getManager() => Auth0Manager();
class Auth0Manager extends AuthManager {
String? accessToken;
@override
Future<void> Login() async {
//some native code....
}
}
和我们的 web.dart-文件是这样的:
import 'package:msal_js/msal_js.dart';
import 'auth_manager.dart';
import 'dart:js' as js;
import 'iAuth_manager.dart';
AuthManager getManager() => Auth0ManagerForWeb();
class Auth0ManagerForWeb extends AuthManager {
@override
Future<String> Login() async {
//web-specific code here
}
}
只需在特定于平台的文件中为每个平台实施不同的登录方法。
在我们的 main.dart 文件中,我们可以这样做:
void login() async {
AuthManager.instance?.Login();
}
我们将根据我们使用的设备调用特定策略。 各个库的使用以及我们如何实现它们不在这个问题范围内。
归功于this medium article 和 this