具有 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 articlethis